yii2開発後記

WBOY
リリース: 2016-06-23 13:19:13
オリジナル
975 人が閲覧しました

数日前、自分のブログ用の 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 を開始する準備ができています。見て、マークを残すことができます。

基本的な概要

1. デフォルトのコントローラー/メソッドを変更します

yii のデフォルトは、web.php の $config で 'defaultRoute'='xxxx' を設定して、カスタムのデフォルト コントローラーを使用できます。 Yii::$app->defaultRoute 属性をオーバーライドすることもできます。

yii のデフォルトのメソッドは、index です。これは、vender/yiisoft/yii2/base/Controller.php で最初に設定することも、コントローラーで defaltAction='action' を上書きすることもできます。

2. 独立したモジュールを追加する

yii は、追加が完了したら、web.php モジュール スイッチの $config に 'modules'=[id=..class=...] を設定します。 。

モジュールは通常、いくつかの独立した機能に使用されます。たとえば、私のサイトの admin モジュールは全体的なバックグラウンド ロジックを担当します。

3. モデル操作テーブルの設定

Yii のモデルには Model と ActiveRecord が含まれており、Model クラスは基本的なビジネス ロジックを処理するために使用され、同じ名前のデータ テーブルを操作したい場合は継承してください。 ActiveRecord クラス。

モデルフォルダーの Operation.class にある Operation クラスを使用して yiidbActiveRecord を継承し、Operation テーブルを操作します。

他のテーブルを操作したい場合は、パブリック $tableName 属性をオーバーライドして設定することもできます。または、その tableName メソッドを書き換えます (静的メソッドであることに注意してください): public static function tableName(){return 'tableName'}

4. ビュー レイヤの構成

yii のビュー レイヤは .php ファイルを使用し、その内部実装も主に使用される $pagination]) ?> などの Yii 組み込みウィジェットの形式は、そのページング クラスを表します。

さらに、入力などのウィジェットは ActiveForm クラスを使用して表示されます。その一般的なウィジェットは yiiwidget クラスに配置されます。

5. レイアウト モード

yii はデフォルトでレイアウト モードを有効にし、そのレイアウト テンプレートは veder/yiisoft/yii2/web/controller で public $layout 属性を設定できます。 php 基本クラス テンプレートファイルの構成を変更します。

特定のレイアウトをオフにしたり、指定したりすることもできます:

    コントローラー内のコントロール public $layout=false/'layout'
  • コントローラーのメンバー メソッド内のコントロール $this->layout=false/'layout'
  • ビューでレイアウト $this->context->layout=false/'layout' を選択します
6. モデルの基本設定

yii のモデルは、MVC ロジックの処理を実行する MVC プロセッサーです。モデルの属性定義はそのコアです。マジック メソッド get/set がデフォルトで定義されているため、モデルの外部で $modle->attr='value' を直接呼び出して、モデルの属性を取得/割り当てることができます。

シーン設定

yii にはシーンの定義があり、シーンを定義すると、さまざまな状況で yii が異なるデータ情報を返すようになります。モデルの scenarios() メソッドを使用して、戻りデータを設定します。

モデルを使用するときは、シーン名 $model=new Model(['scenario'=>'login']); を渡してシーンを決定します。

ルール設定

yii での検証ルールの定義では、 rules() メソッドを使用して複数のルールを一度に定義したり、さまざまなシナリオに従って定義したりできます。外部検証の場合は、$model->validate() メソッドを使用して検証を実行します。

セーフ モードでは、セキュリティ検証が必要です。つまり、特定のルールがない場合は、ルールで各属性を検証する必要があります。また、「安全な」検証も追加する必要があります。そうしないと、検証が失敗し、データベースへの保存も失敗します。

ラベル設定

フォームを処理するときは、$model->attributes 属性を使用してすべての属性を表します。 AttributeLabels メソッドは、ビューレイヤー内の ActiveForm によって生成された各フォーム項目のラベルラベルを表すために使用される配列を返します

7. JS/CSS ファイルの参照

yii のビューもオブジェクト指向のアプローチを使用しているため、これが必要です。 CSS と JS ファイルを導入するための特別な方法。

  • $this->registerJsFile('js.js') を使用して js ファイルをインポートします。
  • $this->registerJsFile('js.js') を使用して js ファイルをインポートします。
  • //在模型中计算出总数量$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='上一页'])。
    ログイン後にコピー
9. URL を作成します

use yii\helpers\Url;Url::to(['xxx/xxx']);//或Yii::$app->urlManager->createUrl('xxx.xxx')
ログイン後にコピー

10 クエリ ビルダー

yii の QUERY クエリ ステートメント ビルダーは、モデルとコントローラーで使用できますが、モデルが に対応しない可能性があります。ただし、その構成は SQL ステートメントに近いため、Yii の組み込みルールに厳密に従わなくても、複雑な SQL ステートメントを簡単に作成できます。

メソッドは次のとおりです:

$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() を定義できます。 。

使用時にベース名前空間を適用し、yiihelpersXXX を使用してから、クラスを使用してベース静的メソッド XXX::YYY() を参照します

12. アソシエーション モデル

yii のアソシエーション モデルは、 current table の場合、該当するテーブルのレコードが取り出されます。例えば、テーブルAから情報が取り出されるたびに、テーブルAに対応する情報がテーブルBからも取り出され、ModelAにgetBtableメソッドが定義されます

rree

joinWith('Btable')が使えます->find(); クエリ時 検索時に関連するオブジェクトを検索する

$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]。ビュー データのテンプレートへのインポートを完了できます。

$this->var=xxx; を定義し、$this->var を使用してレイアウト内で参照することもできます。

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 モジュール間を移動

モジュール内で Url::to() メソッドを使用して URL を作成すると、自動的にモジュール名を追加すると、他のモジュールにジャンプできなくなります。たとえば、Url::to(['//index/index.html) のように、文字列の前に「//」文字を追加できます。 '])は先頭アドレスへジャンプすることを意味します。

2. 変数を初期化する

コントローラーでの各操作の前に変数を初期化する場合は、さまざまな変数を渡す必要があるため、__construct コンストラクターをオーバーライドしないでください。各アクションの実行時に実行される beforeAction() 関数を書き直すのが最善です。

注意: return true ステートメントはメソッドの最後に追加する必要があります。

3. JS で YII 変数を使用する

JS で YII URL 変数を使用したい場合は、初めてビューをレンダリングするときに HTML の script タグを使用して変数を事前解析し、次のコードを追加します。変数を使用する必要がある場所の前に。

//删除一条数据$this->findOne($id)->delete();//删除所有符合条件的数据$this->deleteAll([where]);
ログイン後にコピー

あとは普通にJSファイル内で使用します。

4. グローバル定数の定義

config フォルダーの params.php でグローバル定数を定義できます。

次に、 Yii::$app->params['key'] を使用して、スクリプト内でそれを参照します。

5. yii モデル属性を配列に変換する

YII は、toArray() メソッドを使用して、モデル属性を出力用の配列に変換します。これは、クエリ中に独立して使用することも、連続操作で使用することもできます。

6. コントローラーを使用してビュー ページをレンダリングする場合は、レンダリングの前に必ず echo または return を追加し、echo/return $this->render('view',$data);

7 の属性。ええ、覚えておいてください! ActiveForm では、データ テーブルにこのフィールドがある場合、public を使用して属性を宣言しないでください。属性に値を割り当てることができなくなります。 。 。 。 (血の涙)。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート