Yiiフレーム2.0のビューとwidgetsフォームの使用

5981 ワード

2.0のコントローラの作成とactionメソッドの追加は1.0と基本的に同じです.しかし、私は彼のwidgetsのActiveFormと1.1バージョンが少し違うことに気づいた.
ビューについても基本的に同じですが、renderとrenderPartialの2つの方法があり、後者はレイアウトに呼び出されません.jqueryコンポーネントも自動的に呼び出されませんが、設定レイアウトが異なります.
1.1はコンポネントでphpには$layoutの変数があり、この変数の値を変更することでレイアウトを変更します.
2.0では親Controllerに配置されていませんが、findLayoutFileの方法があります.ここでは様々な状況を分析しています.デフォルトはmainですが、1.1のように親に直接書くこともできます.プロファイルのwebに書くこともできます.phpでは、「layout」=>「mine」と、layoutPathとレイアウトファイルのパスを設定することもできます.場合によっては独自のレイアウトが必要な場合は、彼のコントローラで$this->layout=「mine」を変更することで、layoutディレクトリの下のmineを呼び出すことができます.phpレイアウト.
 
フロントアクセスのパスを取得できます.
$baseUrl=Yii::$app->request->baseUrlは、現在のスクリプトのディレクトリを取得します.このフレームワークはシングルエントリモードなので、ルートディレクトリです.
このうち1.1バージョンの場合はYii::app()で現在のYiiインスタンスを取得し、2.0バージョンで採用されていることYii:$appで現在のインスタンスを取得します.
 
まず、オブジェクトを取得します.
2.0バージョンでは、$form=ActiveForm::begin();またuse yiiwidgetsActiveFormを使用します.
1.1バージョンでは$form=$this->beginWidget('CActiveForm')です.
私は2.0バージョンのwidgetsディレクトリの下でCActiveFormを見つけられませんでした.phpはActiveFormのみphpファイル.
 
次に、テキストボックスなど、取得フォームのオブジェクトも異なります.
2.0には、このような$form->field($LoginForm,'name',['id'=>'name']); 
1.1には、このような$form->textField($loginForm,'name',array('id'=>'name');
 
公式ドキュメントを見ていると、ActiveFormでformの要素を作成できるだけでなく、yiihelpersHtmlでも作成できることがわかります.例えば、例にはsubmitボタンがHtmlで作成されています.
Html::submitButton('コミット',['class'=>'btn-primary']);
 
たとえばinputを作成して自分の属性を加えるにはtextInputメソッドを呼び出す必要があります.たとえば、
<?php echo $form->field($model, 'username')->textInput(['id'=>'userName']); ?>

 
   :textInput();

   :passwordInput();

   :radio(),radioList();

   :checkbox(),checkboxList();

   :dropDownList();

   :hiddenInput();

   :textarea(['rows'=>3]);

    :fileInput();

    :submitButton();

    :resetButtun();



<?php

$form = ActiveForm::begin(['action' => ['test/getpost'],'method'=>'post',]); ?>



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



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



<? echo $form->field($model, 'sex')->radioList(['1'=>' ','0'=>' ']) ?>



<? echo $form->field($model, 'edu')->dropDownList(['1'=>'  ','2'=>'  ','3'=>'  '], ['prompt'=>'   ','style'=>'width:120px']) ?>



<? echo $form->field($model, 'file')->fileInput() ?>



<? echo $form->field($model, 'hobby')->checkboxList(['0'=>'  ','1'=>'  ','2'=>'   ','3'=>'   ']) ?>



<? echo $form->field($model, 'info')->textarea(['rows'=>3]) ?>



<? echo $form->field($model, 'userid')->hiddenInput(['value'=>3]) ?>



<? echo Html::submitButton('  ', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>



<? echo Html::resetButton('  ', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>



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

しかし、inputなどのラベルのほかにも、外にdivをかぶっているなど、他のラベルがたくさん付いています.inputラベルのみを使用するには、yiihelpersHtmlのactiveシリーズ関数を使用してフォームを生成します.
<?php $form = ActiveForm::begin(); ?>

            <?php echo Html::activeTextInput($model, 'username', ['id'=>'userName']); ?>

            <?php echo Html::activePasswordInput($model, 'password', ['id'=>'psd']); ?>

            <?php echo Html::activeTextInput($model, 'captcha', ['id'=>'verify']); ?>

            <?php echo Html::submitInput('', ['id'=>'sub']) ?>

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