Я создал CRUD в Yii2. Я использовал класс extend Model, и я думаю, что все в порядке, но когда я пытался проверить свои данные, я получаю ошибки, которые не могут быть атрибутами blanc. Когда я не использовал проверку достоверности данных для сохранения данных в соответствии с исходными данными. Это мое действие создания и обновления в контроллере:данные проверяются в разделе правил в yii2
public function actionCreate()
{
$model = new UrUserForm();
$model->scenario = 'create';
var_dump($model->validate(), $model->getErrors());
exit();
if ($model->load(Yii::$app->request->post())&& $model->saveUser()) {
Yii::$app->session->setFlash('success', 'Użytkownik został dodany');
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function actionUpdate($id)
{
$model = UrUserForm::findOne($id);
if (!$model) {
Yii::$app->session->setFlash('error', 'Niestety wystąpił błąd. Przosze skontaktować się z administratorem');
return $this->redirect(['index']);
}
$model->scenario = 'update';
if ($model->load(Yii::$app->request->post()) && $model->updateUser()) {
Yii::$app->session->setFlash('success', 'Dane zostały zapisane');
return $this->redirect(['index']);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
Я написал var_dump() выше в создании действия, чтобы проверить, являются ли данные, и когда я заполнил все мои входы я есть это сообщение:
bool (false) array (7) {["Login"] => array (1) {[0] => string (22) "Вход не может быть пустым." } ["Sex"] => array (1) {[0] => string (23) «PĹeÄ не может быть пустым». } ["Name"] => array (1) {[0] => string (22) «ImiÄ не может быть пустым». } ["Surname"] => array (1) {[0] => string (25) "Nazwisko не может быть пустым." } ["BirthDate"] => array (1) {[0] => строка (31) «Данные уродзения не могут быть пустыми». } ["Email"] => array (1) { [0] => строка (22) «Электронная почта не может быть пустым». } ["Password"] => array (1) { [0] => строка (23) «HasĹo не может быть пустым». }}
Когда я удаляю var_dump, он сохраняет корректно, но я знаю, что должен проверять эти данные. Существует мой UrUserForm:
<?php
namespace backend\modules\users\models;
use common\models\User;
use backend\modules\users\models\UrUser;
use yii\base\Model;
use Yii;
use yii\helpers\Url;
class UrUserForm extends Model {
public $Login;
public $Email;
public $Password;
public $Sex;
public $Country;
public $Language;
public $Category;
public $AccoutType;
public $Name;
public $Surname;
public $BirthDate;
public $RulesAccept;
public $user;
public function rules() {
return [
[['Country', 'Language', 'Category'], 'safe'],
['Login', 'filter', 'filter' => 'trim'],
[['Login', 'Sex', 'Name', 'Surname', 'BirthDate'], 'required'],
['Login', 'unique', 'targetClass' => '\common\models\User', 'message' => Yii::t('app', 'Pdany login jest już używany')],
['Login', 'string', 'min' => 2, 'max' => 255],
['Email', 'filter', 'filter' => 'trim'],
['Email', 'required'],
['Email', 'email'],
['Email', 'string', 'max' => 255],
['Email', 'unique', 'targetClass' => '\common\models\User', 'message' => Yii::t('app', 'Podany e-mail jest już używany')],
['Password', 'string', 'min' => 6],
['Password', 'required','on' => 'create'],
];
}
public function saveUser() {
$user = new UrUser();
$user->Login = $this->Login;
$user->Email = $this->Email;
$user->RulesAccept = 1;
$user->Rel_Sex = $this->Sex;
$user->Name = $this->Name;
$user->BirthDate = $this->BirthDate;
$user->Surname = $this->Surname;
$user->setPassword($this->Password);
$user->generateAuthKey();
$user->Rel_Country = $this->Country;
$user->Rel_UserCategory = $this->Category;
$user->Rel_Language = $this->Language;
$user->status = 10;
$this->user = $user;
$user->created_at=time();
if ($this->validate() && $user->validate()) {
$user->save();
return $user;
}
return false;
}
public function updateUser() {
$this->user->load($this->toArray(), '');
$this->user->Rel_Country=$this->Country;
$this->user->Rel_Language=$this->Language;
$this->user->Rel_UserCategory=$this->Category;
$this->user->Rel_Sex=$this->Sex;
$this->user->updated_at=time();
if (!empty($this->Password)) {
$this->user->setPassword($this->Password);
}
return $this->user->save();
}
public static function findOne($id) {
$user = UrUser::find()->where(['Id' => $id])->one();
$model = new UrUserForm();
$model->load($user->toArray(), '');
$model->Country=$user->Rel_Country;
$model->Language=$user->Rel_Language;
$model->Category=$user->Rel_UserCategory;
$model->scenario = 'update';
$model->Sex=$user->Rel_Sex;
$model->user = $user;
return $model;
}
}
И это форма:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use common\models\SmCountry;
use common\models\SmSex;
use common\models\SmLanguage;
use common\models\SmUserCategory;
use yii\helpers\ArrayHelper;
use kartik\date\DatePicker;
/* @var $this yii\web\View */
/* @var $model backend\modules\users\models\UrUser */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="ur-user-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'Sex')->radioList(array('1' => Yii::t('app', 'Mężczyzna'), 2 => Yii::t('app', 'Kobieta'))); ?>
<?= $form->field($model, 'Name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'Surname')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'Login')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'Email')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'BirthDate')->widget(DatePicker::classname(), ([
'pluginOptions' => [
'language' => 'pl',
'format' => 'yyyy-mm-dd',
'todayHighlight' => true,
'autoclose' => true,
]
])) ?>
<label class="control-label"> <?= Yii::t('app', 'Hasło')?> </label>
<?= $form->field($model, 'Password')->passwordInput(['placeholder' => Yii::t('app', 'Utwórz hasło'), 'value' => ''])->label('') ?>
<label class="control-label"> <?= Yii::t('app', 'Państwo')?> </label><br>
<?= Html::activeDropDownList($model, 'Country', ArrayHelper::map(SmCountry::find()->all(), 'Id', 'Name'), ['prompt' => 'Wybierz państwo'])?>
<br><label class="control-label"> <?= Yii::t('app', 'Język')?> </label><br>
<?= Html::activeDropDownList($model, 'Language', ArrayHelper::map(SmLanguage::find()->all(), 'Id', 'Name'), ['prompt' => 'Wybierz język'])?>
<br><label class="control-label"> <?= Yii::t('app', 'Kategoria')?> </label><br>
<?= Html::activeDropDownList($model, 'Category', ArrayHelper::map(smUserCategory::find()->all(), 'Id', 'Name'), ['prompt' => 'Wybierz kategorię'])?>
<div class="form-group">
<?= Html::submitButton(Yii::t('app', 'Dodaj'), ['class'=> 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</
DIV>
Я не знаю, почему у меня есть эта ошибка, когда я хочу, чтобы проверить мой кто-нибудь данные могут помочь мне ?
показать соответствующую форму тоже. –
где сценарий? –
я обновляю свое сообщение и показываю, что вы формируете – Informer