Arhn - архитектура программирования

проверка данных в разделе правил в yii2

Я создал CRUD в Yii2. Я использовал модель расширения класса, и я думаю, что все в порядке, но когда я пытался проверить свои данные, я получаю ошибки, что атрибуты не могут быть пустыми. Когда я не использовал проверку правильности сохранения данных моего приложения в datatable. Это мое действие создать и обновить в контроллере:

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) { ["Логин"]=> array(1) { [0]=> string(22) "Логин не может быть пустым." } ["Sex"]=> array(1) { [0]=> string(23) "PĹeÄ не может быть пустым." } ["Имя"]=> массив(1) { [0]=> строка(22) "Имя не может быть пустым." } ["Фамилия"]=> array(1) { [0]=> string(25) "Назвиско не может быть пустым." } ["Дата Рождения"]=> array(1) { [0]=> string(31) "Данные urodzenia не могут быть пустыми." } ["Электронная почта"]=> array(1) { [0]=> строка(22) "Электронная почта не может быть пустой." } ["Пароль"]=> array(1) { [0]=> string(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(); ?>

</

раздел>

Я не знаю, почему у меня возникает эта ошибка, когда я хочу проверить свои данные, кто-нибудь может мне помочь?

11.02.2016

  • показать также соответствующую форму. 12.02.2016
  • я обновляю свой пост и показываю Вам форму 12.02.2016
  • сценарий находится в моем контроллере 12.02.2016

Ответы:


1

Атрибуты пусты, потому что вы выгружаете их перед загрузкой в ​​экземпляр модели.

Сначала попробуйте $model->load(Yii::$app->request->post()). Тогда вы могли бы правильно использовать методы $model->validate() и $model->save().

12.02.2016
  • я знаю, что решаю это сам ... это была моя ошибка, спасибо за ответ;) Хорошего дня :) 12.02.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..