Всем привет, коллеги помогите разобраться с ошибкой при валидации формы приходит ответ вместе с ошибкой , чтото связанно с ошибками но не могу понять куда копать ?
{"signupform-email":["\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u00abEmail\u00bb."],"signupform-password":["\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u00abPassword\u00bb."],"signupform-recaptcha":["\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434."]}<pre>An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in D:\Openserver7\domains\coba\investproject.loc\frontend\controllers\SiteController.php on line 323. in D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\web\Response.php:366 Stack trace:
0 D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\web\Response.php(339): yii\web\Response->sendHeaders()
1 D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\web\ErrorHandler.php(135): yii\web\Response->send()
2 D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\base\ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
4 {main} Previous exception: yii\web\HeadersAlreadySentException: Headers already sent in D:\Openserver7\domains\coba\investproject.loc\frontend\controllers\SiteController.php on line 323. in D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\web\Response.php:366 Stack trace:
0 D:\Openserver7\domains\coba\investproject.loc\vendor\yiisoft\yii2\web\Response.php(339): yii\web\Response->sendHeaders()
Модель
<?php
namespace frontend\models;
use common\models\Profile;
use yii\base\Model;
use common\models\User;
use yii\helpers\Html;
/**
* Signup form
*/
class SignupForm extends Model
{
public $username;
public $email;
public $password;
public $password_repeat;
public $subscribe = true;
public $ip;
public $reCaptcha;
/**
* @inheritdoc
*/
public function rules()
{
return [
['username', 'trim'],
['username', 'required'],
['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'Это имя пользователя уже занято.'],
['username', 'string', 'min' => 2, 'max' => 255],
// ['username', 'validateUsername'],
['email', 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'string', 'max' => 255],
['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'Еmail уже существует.'],
['password', 'required'],
[['password','password_repeat'], 'string', 'min' => 6],
['password_repeat', 'compare', 'compareAttribute'=>'password', 'skipOnEmpty' => false, 'message'=>"Должен совпадать с паролем"],
//['password_repeat', 'validatePasswordRepeat'],
['ip', 'string'],
[['reCaptcha'], \himiklab\yii2\recaptcha\ReCaptchaValidator::className(), 'secret' => \Yii::$app->params['reCaptcha']['secret'], 'uncheckedMessage' => 'Please confirm that you are not a bot.']
];
}
public function attributeLabels()
{
return [
'subscribe' => 'Подписаться на Емейл рассылку',
];
}
/**
* Signs user up.
*
* @return User|null the saved model or null if saving fails
*/
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->ip = Html::encode($this->ip);
$user->email = $this->email;
$user->status = User::STATUS_NOT_ACTIVE;
$user->updated_at = $user->created_at = date('Y:m:d H:i:s');
$user->setPassword($this->password);
$user->generateAuthKey();
$user->generateRegisterToken();
if($user->save()){
//Создаем профиль пользователя
$profile = new Profile();
$profile->user_id = $user->id;
$profile->subscription_email = $this->subscribe;
$profile->save();
}
return $this->_sendEmail($user);
}
public function validateUsername($attribute, $params)
{
if (!preg_match('/^[a-z]\w*$/i', $this->username)) {
$this->addError($attribute, \Yii::t('appn', \Yii::t('appn', 'Ошибка валидации поля Имя.Используйте латинские символы,цыфры.Запрещена кирилица, пробелы и символы *(!)@"&?%')));
}
}
/**
* @param $email - принимаем значение емайл
* @return string
* Генерируем имя пользователя , если такой существует пробуем присвоитьт номера , или оставляем под USE
*/
protected function getUserName($email)
{
$user = User::findOne(['username'=>explode("@", $email)[0]]);
if(!$user){
return explode("@", $email)[0];
}
$username_rend = rand(1,10);
$user = User::findOne(['username'=> explode("@", $email)[0].'_'.(string)$username_rend]);
if(!$user){
return explode("@", $email)[0].'_'.(string)$username_rend;
}
return 'User_'.(string)rand(1,10000);
}
private function _sendEmail($user)
{
$auth = \Yii::$app->authManager;
$authorRole = $auth->getRole('user');
$auth->assign($authorRole, $user->getId());
$message = \Yii::$app
->mailer
->compose(
['html' => 'userConfirmRegister-html'],
['user' => $user]
)
->setFrom([\Yii::$app->params['supportEmail']])
->setTo($user->email)
->setSubject(\Yii::t('appn', 'Подтверждение регистрации'))
->send();
if(!$message){
return false;
}
return true;
}
}
Контроллер
public function actionSignUp()
{
if (!\Yii::$app->user->isGuest) {
Yii::$app->session->setFlash('warning', 'Вы уже зарегистрировались');
return $this->redirect('/');
}
$model = new SignupForm();
// ajax validation
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
echo json_encode(ActiveForm::validate($model));
Yii::$app->end();
}
if ($model->load(Yii::$app->request->post())) {
if($model->signup() != null){
Yii::$app->session->setFlash('success', Yii::t('appu', 'Для окончания регистрации перейдите по ссылке, которая была отправлена на указанный E-mail.').
Yii::t('appu', ' Если письмо не пришло проверьте папку спам.'));
return $this->redirect('/');
}else{
Yii::$app->session->setFlash('error', 'Пользователь с таким логином или Е-mail уже существует, попробуйте другой Е-mail или воспользоваться восстановлением <a href="/site/request-password-reset">пароля</a>');
return $this->redirect('/sign-up');
}
/*
if ($user = $model->signup()) {
if (Yii::$app->getUser()->login($user)) {
return $this->goHome();
}
}*/
}
return $this->render('signup', [
'model' => $model,
]);
}
Для начала замените
echo json_encode(ActiveForm::validate($model));
Yii::$app->end();
на
return ActiveForm::validate($model);
немного изменил код валидации, всем удачи
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветЦиклом foreach подгружаю из базы данных посты как на примере: "пост 1" "пост 2" "пост 3" и тд