数日前、自分のブログ用の CMS を書こうと考えていたときに、非常に強力と言われている Yii を思い出しました。バージョン2.0があることがわかったので、最新のものを試してみることにしました。 Yii2.0 は 2014 年 12 月にリリースされましたが、中国では使用している人が比較的少ないと思われ、問題が発生したときは罠にはまったと感じました。バージョン 1.0 については多くの回答が見つかったので、Google にアクセスして英語のサイトを確認する必要がありました。小さな問題については誰も私に気づかなかったので、私は自分で STACK OVERFLOW を実行し、ソース コードを調べましたが、それには 1 日以上かかりました。 。 。彼はとても苦しんだと言えるでしょう。
しかし、ウェブサイトがついに構築されました、アドレス: http://www.alwayscoding.cn。これからは、このサイトでブログが同時に更新され、お気に入りの記事を自由に投稿することもできます~~さらに、ソースコードは github にもあります。アドレスは https://github.com/zhenbianshu/blog-cms です。この CMS を使用したい場合は、サポートを提供します〜 最後に、次のこともまとめました。使用経験があり、yii2.0 を開始する準備ができています。見て、マークを残すことができます。
yii のデフォルトのメソッドは、index です。これは、vender/yiisoft/yii2/base/Controller.php で最初に設定することも、コントローラーで defaltAction='action' を上書きすることもできます。
2. 独立したモジュールを追加する
モジュールは通常、いくつかの独立した機能に使用されます。たとえば、私のサイトの admin モジュールは全体的なバックグラウンド ロジックを担当します。
3. モデル操作テーブルの設定
モデルフォルダーの Operation.class にある Operation クラスを使用して yiidbActiveRecord を継承し、Operation テーブルを操作します。
他のテーブルを操作したい場合は、パブリック $tableName 属性をオーバーライドして設定することもできます。または、その tableName メソッドを書き換えます (静的メソッドであることに注意してください): public static function tableName(){return 'tableName'}
4. ビュー レイヤの構成
さらに、入力などのウィジェットは ActiveForm クラスを使用して表示されます。その一般的なウィジェットは yiiwidget クラスに配置されます。
5. レイアウト モード
特定のレイアウトをオフにしたり、指定したりすることもできます:
シーン設定
yii にはシーンの定義があり、シーンを定義すると、さまざまな状況で yii が異なるデータ情報を返すようになります。モデルの scenarios() メソッドを使用して、戻りデータを設定します。
モデルを使用するときは、シーン名 $model=new Model(['scenario'=>'login']); を渡してシーンを決定します。
ルール設定
yii での検証ルールの定義では、 rules() メソッドを使用して複数のルールを一度に定義したり、さまざまなシナリオに従って定義したりできます。外部検証の場合は、$model->validate() メソッドを使用して検証を実行します。
セーフ モードでは、セキュリティ検証が必要です。つまり、特定のルールがない場合は、ルールで各属性を検証する必要があります。また、「安全な」検証も追加する必要があります。そうしないと、検証が失敗し、データベースへの保存も失敗します。
ラベル設定
フォームを処理するときは、$model->attributes 属性を使用してすべての属性を表します。 AttributeLabels メソッドは、ビューレイヤー内の ActiveForm によって生成された各フォーム項目のラベルラベルを表すために使用される配列を返します
7. JS/CSS ファイルの参照
//在模型中计算出总数量$count=$this->find()->where()->count();//用总条数和设定的每页个数实例化一个yii\data\Pagination类$page=new Pagination([totalCount' => $count,'defaultPageSize' => 2,]);//使用分页类的属性搜索想要的数据,并返回数据$res=$this->find()->where()->offset($page->offset)->limit($page->limit)->all();return [$res,$page];//使用控制器渲染页面$data=$model->getData();return $this->render('index',$data);//在视图页面中使用数据。foreach($res as key)...yii\widgets\LinkPager::widget([pagination=$page,prevPageLabel='上一页'])。
use yii\helpers\Url;Url::to(['xxx/xxx']);//或Yii::$app->urlManager->createUrl('xxx.xxx')
$res=(new yii\db\Query())->select()->from()->leftJoin()->where->()->all();
where ステートメントはより複雑です:
where('in','id',$array)或where('id'=>$array)
詳細については、http://www.yiichina.com/doc/guide/2.0/db- で where メソッドの分析を確認できます。クエリビルダー。
11. カスタム関数
yii のカスタム関数は、vendor/yiisoft/yii2/helpers/ フォルダーに作成し、新しい XXX.php ファイルを作成してから、カスタム クラスを定義し、静的メソッド YYY() を定義できます。 。
12. アソシエーション モデル
yii のアソシエーション モデルは、 current table の場合、該当するテーブルのレコードが取り出されます。例えば、テーブルAから情報が取り出されるたびに、テーブルAに対応する情報がテーブルBからも取り出され、ModelAにgetBtableメソッドが定義されます
rree$res->btable を使用してオブジェクトを直接参照することもできます。 。
$res[n]->btable->attr を使用して、テーブル B の対応する属性を参照します。
13. ActiveForm を使用してフォームを作成します
yii2 でウィジェットを使用してビューを作成する手順: モデルを設定し、そのプロパティを設定します
function getBtable(){ return $this->hasOne/hasMany(Btable::className,['bid'=>'aid']);}
public $username;public $password;
ラベルを設定します
public function rules(){ return [ [['username', 'password','conpass'], 'required'], ['conpass', 'password', ];}
次にコントローラーに、モデルのインスタンスがレンダリングされます:
public function attributeLabels(){ return [ 'username' => '管理员', 'password' => '密码', ]; }
最後に、ページで ActiveForm を使用します
$this->render('index',['model'=>(new Model/ActiveRecord)])
14. 検証コードを使用します
コントローラーに検証コードを設定するための独立したメソッド
use yii\widgets\ActiveForm;<?php $form = ActiveForm::begin([ 'action' => ['log/login'], 'method'=>'post' ]); ?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password') ?> <div class="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> </div><?php ActiveForm::end(); ?>
public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'height' => 50, 'width' => 80, 'minLength' => 4, 'maxLength' => 4 ], ]; }
(captchaAction をコントローラー内の位置に設定する必要があります。モジュールをカスタマイズする場合は、モジュールを設定する必要があります) ビューで使用します
public function rules(){ return [['verifyCode', 'captcha','captchaAction'=>'admin/log/captcha'],];}
15. ビューでのブロックの使用
ブロックの内容は $this->beginBlock(['id'=> ;xxx]) と $this->endBlock() にあります。$view-> を使用します。レイアウトで参照する block[id]。ビュー データのテンプレートへのインポートを完了できます。
16.更新と削除
更新
use yii\captcha\Captcha;<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), ['captchaAction'=>'log/captcha', 'imageOptions'=> ['alt'=>'点击换图', 'style'=>'cursor:pointer'] ]) ?>
//查找到一条结果$res=$this->find()->where()->one();//对结果修改$res->attr='xxx';//执行更新操作$res->update();
注意事項とヒント
1. URL モジュール間を移動
コントローラーでの各操作の前に変数を初期化する場合は、さまざまな変数を渡す必要があるため、__construct コンストラクターをオーバーライドしないでください。各アクションの実行時に実行される beforeAction() 関数を書き直すのが最善です。
3. JS で YII 変数を使用する
JS で YII URL 変数を使用したい場合は、初めてビューをレンダリングするときに HTML の script タグを使用して変数を事前解析し、次のコードを追加します。変数を使用する必要がある場所の前に。
//删除一条数据$this->findOne($id)->delete();//删除所有符合条件的数据$this->deleteAll([where]);
4. グローバル定数の定義
config フォルダーの params.php でグローバル定数を定義できます。
5. yii モデル属性を配列に変換する
YII は、toArray() メソッドを使用して、モデル属性を出力用の配列に変換します。これは、クエリ中に独立して使用することも、連続操作で使用することもできます。
7 の属性。ええ、覚えておいてください! ActiveForm では、データ テーブルにこのフィールドがある場合、public を使用して属性を宣言しないでください。属性に値を割り当てることができなくなります。 。 。 。 (血の涙)。