ホームページ >バックエンド開発 >PHPチュートリアル >PHP の Yii フレームワークでビューを作成およびレンダリングする方法の詳細な説明、yii Framework_PHP チュートリアル
ビューは MVC パターンの一部です。 Web アプリケーションでは、ビュー テンプレートに基づいてビューが作成され、主に HTML コードと表示 PHP コードが含まれます。これは、yiiwebView アプリケーション コンポーネントを通じて管理されます。は、主にビューの構築とレンダリングに役立つジェネリック メソッドを提供します。簡単にするために、ビュー テンプレートまたはビュー テンプレート ファイルをビューと呼びます。
ビューの作成
前述したように、ビューは HTML と PHP コードを含む PHP スクリプトです。次のコードは、ページ タイトルやフォームなどの動的コンテンツの生成に PHP コードが使用されていることがわかります。 HTML コードによって美しい HTML ページに編成されます。
リーリービューでは、$this にアクセスして yiiwebView をポイントし、このビュー ファイルを管理およびレンダリングできます。
上記の例のビューには、$this に加えて、$model などの他の事前定義変数があります。これらの変数は、ビューのレンダリングをトリガーするコントローラーまたは他のオブジェクトからビューに渡されるデータを表します。
ヒント: IDE エディターで認識できるように、ビュー ファイルのヘッダー コメントに定義済み変数をリストします。これは、ビュー ドキュメントを生成する良い方法です。
安全性
HTML ページを生成するビューを作成する場合、ユーザー入力データを表示する前にトランスコードしてフィルター処理することが重要です。そうしないと、アプリケーションがクロスサイト スクリプティング攻撃に対して脆弱になる可能性があります。
プレーン テキストを表示するには、まず yiihelpersHtml::encode() を呼び出してトランスコーディングします。たとえば、次のコードはユーザー名を表示する前にトランスコードします。 リーリー
HTML コンテンツを表示するには、まず yiihelpersHtmlPurifier を呼び出してコンテンツをフィルターします。たとえば、次のコードは送信されたコンテンツを表示する前にフィルターします。 リーリーヒント: HTMLPurifier は出力データのセキュリティを確保するのに優れていますが、アプリケーションが高いパフォーマンスを必要とする場合は、フィルターされた結果をキャッシュすることを検討してください。
組織ビューコントローラーやモデルと同様に、ビューの整理にはいくつかの規則があります:
コントローラーによってレンダリングされるビュー ファイルは、デフォルトで @app/views/ControllerID ディレクトリに配置されます。ここで、ControllerID はコントローラー ID に対応します。たとえば、コントローラー クラスは PostController であり、ビュー ファイル ディレクトリは @app/views/ である必要があります。 post、コントローラークラスのPostCommentControllerが対応します。ディレクトリは@app/views/post-commentです。モジュール内のコントローラーの場合、ディレクトリはyiibaseModule::basePathモジュールディレクトリの下のviews/ControllerIDディレクトリである必要があります。 ウィジェットによってレンダリングされたビュー ファイルは、デフォルトで WidgetPath/views ディレクトリに配置されます。ここで、WidgetPath はウィジェット クラス ファイルが配置されているディレクトリを表します。 他のオブジェクトによってレンダリングされるビュー ファイルについては、ウィジェットの場合と同様のルールに従うことをお勧めします。
コントローラーまたはウィジェットの yiibaseViewContextInterface::getViewPath() メソッドをオーバーライドして、ビュー ファイルのデフォルト ディレクトリをカスタマイズできます。
レンダービュー
レンダー ビュー メソッドは、ビューをレンダリングするためにコントローラー、ウィジェット、またはその他の場所で呼び出すことができます。このメソッドは次の形式に似ています。 リーリー コントローラーでのレンダリング
コントローラーでは、次のコントローラー メソッドを呼び出してビューをレンダリングできます:
yiibaseController::render(): ビュー名をレンダリングし、レイアウトを使用してレンダリング結果を返します。
yiibaseController::renderPartial(): ビュー名をレンダリングし、レイアウトを使用しません。
ウィジェットは CWidget またはそのサブクラスのインスタンスであり、主にデータを表すために使用されるコンポーネントです。たとえば、カレンダー ウィジェットは、A のレンダリングに使用できます。複雑なカレンダー インターフェイス。小さなオブジェクトにより、ユーザー インターフェイスがより再利用可能になります。
次のようにウィジェットを使用できます:
リーリー
または
リーリー
ウィジェットは構成を通じてそのパフォーマンスをカスタマイズできます。これは、CBaseController::beginWidget または CBaseController::widget を呼び出してその初期化プロパティ値を設定することによって行われます。たとえば、CMaskedTextField ウィジェットを使用する場合、使用されるマスクを指定します。これは、出力形式として理解されます (翻訳者注)。これは、これらのプロパティの初期化値を含む配列を渡すことによって行われます。ここでの配列のキーはプロパティの名前であり、配列の値は以下に示すように、小さいオブジェクトの対応するプロパティ。 リーリー
CWidget を継承し、その init() メソッドと run() メソッドをオーバーライドして、新しいウィジェットを定義します。
class MyWidget extends CWidget { public function init() { // 此方法会被 CController::beginWidget() 调用 } public function run() { // 此方法会被 CController::endWidget() 调用 } }
小物件可以像一个控制器一样拥有它自己的视图.默认情况下,小物件的视图文件位于包含了小物件类文件目录的 views 子目录之下.这些视图可以通过调用 CWidget::render() 渲染,这一点和控制器很相似.唯一不同的是,小物件的视图没有布局文件支持。另外,小物件视图中的$this指向小物件实例而不是控制器实例。
视图中渲染
可以在视图中渲染另一个视图,可以调用yii\base\View视图组件提供的以下方法:
例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 yii\base\View 组件:
<?= $this->render('_overview') ?>
其他地方渲染
在任何地方都可以通过表达式 Yii::$app->view 访问 yii\base\View 应用组件, 调用它的如前所述的方法渲染视图,例如:
// 显示视图文件 "@app/views/site/license.php" echo \Yii::$app->view->renderFile('@app/views/site/license.php');