2016-02-11 2 views
0

Я создал 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>

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

+0

показать соответствующую форму тоже. –

+0

где сценарий? –

+0

я обновляю свое сообщение и показываю, что вы формируете – Informer

ответ

1

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

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

+0

я знаю, что я решил это сам ... это была моя ошибка, спасибо за ответ;) У меня приятный день :) – Informer

 Смежные вопросы

  • Нет связанных вопросов^_^