use yii\helpers\Url;Url::to(['xxx/xxx']);//或Yii::$app->urlManager->createUrl('xxx.xxx')
yii2開発後記
数日前、自分のブログ用の 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 ファイルを使用し、その内部実装も主に使用される = LinkPager::widget(['pagination'=>$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' を選択します
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='上一页'])。
use yii\helpers\Url;Url::to(['xxx/xxx']);//或Yii::$app->urlManager->createUrl('xxx.xxx')
ログイン後にコピー
10 クエリ ビルダーuse yii\helpers\Url;Url::to(['xxx/xxx']);//或Yii::$app->urlManager->createUrl('xxx.xxx')
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メソッドが定義されます
rreejoinWith('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 を使用して属性を宣言しないでください。属性に値を割り当てることができなくなります。 。 。 。 (血の涙)。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
