Yii2: Model - View İlişkilendirme Sorunu

Merhabalar,

Var olan veritabanı için Gii ile model ve CRUD oluşturdum. Gelen Create ve Update sayfalarına kendim bazı bölümler eklemek istiyorum. Repeat Password, New Password, Cell Phone gibi.. 





Sorun da tam bu noktada çıkıyor. Formda eklediğim alanları modelde rules'da tanımladım fakat bu alanlar veritabanında olmadığı için [font="Courier New"]model->save();[/font] kodu çalışmıyor.





Not: Çözüm için senaryoları önerecek olan arkadaşların nasıl bir yöntem izlenileceğini biraz detaylı bir şekilde açıklarlarsa sevinirim çünkü o konu ile okuduklarımı pek kavrayamadım.





[b]İyi çalışmalar.[/b]

Sorunu senaryoları kullanarak çözdüm. İsteyenler buradan inceleyebilirler.

Modelin içinde repeat password alanı için public değişken tanımlayabilirsin.

public $repeatPass; gibi…





class Users extends \yii\db\ActiveRecord

{

    

    public $password_repeat;

    public $old_password;

    public $new_password;

    public $new_confirm;


    public static function tableName()

    {

        return 'users';

    }


    public function rules()

    {

        return [

        // Tüm kurallar burada tanımlı.

        ];

    }

Modelim bu şekilde zaten.


<?php


use yii\helpers\Html;

use yii\widgets\ActiveForm;


/* @var $this yii\web\View */

/* @var $model app\models\Users */


$this->title = 'Create Users';

$this->params['breadcrumbs'][] = ['label' => 'Users', 'url' => ['index']];

$this->params['breadcrumbs'][] = $this->title;

?>


<div class="users-create">


    <h1><?= Html::encode($this->title) ?></h1>


    <?php $form = ActiveForm::begin(); ?>


    <?= $form->field($model, 'username')->textInput(['maxlength' => 50]) ?>


    <?= $form->field($model, 'password')->passwordInput(['maxlength' => 255]) ?>


    <?= $form->field($model, 'password_repeat')->passwordInput(['maxlength' => 255]) ?>


    <?= $form->field($model, 'email')->textInput(['maxlength' => 255]) ?>


    <?= $form->field($model, 'cell_phone')->textInput(['maxlength' => 13]) ?>


    <?php

        $this->registerJsFile('jquery.maskedinput.js');

        $this->registerJs('$("#users-cell_phone").mask("+90-999-999-9999");');

    ?>


    <div class="form-group">

        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>

    </div>


    <?php ActiveForm::end(); ?>




</div>



Formum da bu şekilde. Ama bu çözüm olmuyor. Çünkü formda ve veritabanında olmayan bazı alanlar sorun çıkarıyor.

Merhaba @Sedat Ak Bey,

birinci bildiriminizde

ikinci bildiriminizde yine

şeklinde söylemişsiniz ama aldığınız hata çıktısının ne olduğunu yazmamışsınız,

sorununuzu rules’daki tanımlamalarınıza adreslemişsiniz ama rules içinde

şeklinde belirtmişsiniz, bunu açık açık yazmanız gerekli database deki tablonuzdaki constrait lerle uyumlu olması gerekiyor.

yapmanız gereken tablonuzun sql create koduyla birlikte rules içindeki kodlarınızı yazmanız ve karşılaştığınız hatanın ne olduğunu düzgün bir şekilde ifade etmeniz veya ifade edemiyorsanız da aldığınız hata mesajınızı paylaşmanız gerekiyor, yoksa bu şekilde kısır döngüyle devam eder gider.

bu arada Yii 2 beta sürümündedir development ve test aşaması tam olarak tamamlanmadığından dolayı projenizde kullanmanızı önermem, buna bağlı olarak karşılaştığınız hataları burada paylaşmakta buna çözüm üretmekte doğru olmaz, Yii 2 de karşılaştığınız hataları https://github.com/yiisoft/yii2/issues alanına post etmenizi öneririm.

bilginize,

Merhabalar,

Şirket Yii2 kullanıyor. Bu konuda yapabileceğim bir şey yok. İkinci olarak hatalar net değildi o yüzden yazmamıştım. Create ve update sayfalarında farklı hatalar alıyorum. Alanlar faklı olduğu için. Ama açıklamaya çalışayım. Create sayfasındaki hata:

[b]Bad Request (#400)

Missing required parameters: id

The above error occurred while the Web server was processing your request.

Please contact us if you think this is a server error. Thank you.[/b]

Controller’a şu kodları ekldim ve aldığım çıktı:




var_dump($model->getErrors());

die();



array(2) { ["new_password"]=> array(1) { [0]=> string(29) "New Password cannot be blank." } ["new_confirm"]=> array(1) { [0]=> string(28) "New Confirm cannot be blank." } }

Modeldeki rules kısmı ise;


    public function rules()

    {

        return [

            [['username', 'password', 'email'], 'required'],

            [['username'], 'string', 'min' =>3, 'max' => 50],

            [['username'], 'unique'],


            [['email'], 'email'],


            [['password', 'password_repeat'], 'required'],

            [['password'], 'string', 'max' => 255],

            [['password'], 'match', 'pattern' => '/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/',

                'message'=> ('Password must contain at least one lower and upper case character and a digit.')],

            [['password_repeat'], 'compare', 'compareAttribute'=>'password',

                'message' => ('Passwords don\'t match')],


            [['new_password', 'new_confirm'], 'required'],

            [['old_password'],'compare', 'compareAttribute' => 'password'],

            [['new_password'], 'string', 'min'=>8, 'max' => 255],

            [['new_password'], 'match', 'pattern' => '/^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/',

                'message'=> ('New password must contain at least one lower and upper case character and a digit.')],

            [['new_confirm'], 'compare', 'compareAttribute' => 'new_password'],


            [['cell_phone'], 'string', 'max' => 16],

            //[['cell_phone'], 'match', 'pattern' => '[^\+905]', 'message'=> ('Cell phone must begin +905')],


            [['authKey'], 'string', 'max' => 32]


        ];

    }

Merhaba @Sedat Bey

1- Create sayfanızda id parametresinin eksik olduğunu belirten bir hatanız var,

[PROJECT]/[CONTROLLER]/create/id/x123x şeklinde erişmeye çalışabilirmisiniz.

(erişim URL yapılandırmanıza göre farklılık gösterebilir.)

2- model sayfanızdaki rules metodu içindeki aşağıdaki kodlarınızdan kaynaklı olarak




 [['new_password', 'new_confirm'], 'required'],



new_password ve new_confirm alanlarının boş olmaması gerektiğine dair uyarı mesajı almışsınız.

  • bir de rules metodu içindeki aynı kuralları uyguladığınız farklı satırlar var bunları birleştirmenizi yani tek satırda tanımlamanızı öneririm,

[['username', 'password', 'email'], 'required'],


[['password', 'password_repeat'], 'required'],


[['new_password', 'new_confirm'], 'required'],

Yii 2 nin gelişimini yakından takip eden birisi olarak, firmanızın beta aşamasındaki Yii 2 kullanmasını uygun bulmadığım gibi bana hiç mantıklı da gelmiyor.

Ayrıca projeniz tamamlanıp product ortama aktarıldığını varsayarsak, sonrasında var olan/olacak bug ların, hataların giderilmesi konusunda sorumlu kim/kimler olacak? ne zaman, nasıl giderilecek? sorularının yanıtı net değilse ekip olarak soğuk duş etkisine hazır olun.

Yanlış hesap bağdat’dan döner diye atalarımızın söylediği güzel bir sözü de hatırlatmak isterim,

iyi çalışmalar.