2015年5月9日データの表示を担当するビューコンポーネントについて調べてみたいと思います。Toolsで自動生成されたviewsフォルダには、indexフォルダ、layoutsフォルダ、とindex.voltファイルがあり、indexフォルダ内には、index.voltが生成されています。views/index.voltは、下記のようになっています。</body></html>これが、デフォルトのレイアウトビューだと思います。}}内に、各コントローラのindexAction()からのデータ、つまり「localhot/phalcon」の場合は、app/views/index/index.voltビューが埋め込まれます。試しに、下記のように変更してみます。</body></html>ブラウザには、下記のように表示されました。これがどのように処理されているのかを公式サイトを見ながらで勉強していきたいと思います。ビューの使用ビューは、アプリケーションのユーザーインターフェイスを表示します。ビューは、基本的に、データの表示のみに関連するタスクを埋め込まれたPHPコードを含むHTMLファイルです。ビューは、アプリケーションからのリクエストをWebブラウザや他のツールに提供する仕事を処理します。Phalcon\Mvc\ViewとPhalcon\Mv\View\simpleコンポーネントが、MVCアプリケーションのビューレイヤーの管理を担当します。コントローラとビューの結合Phalconは、特定のコントローラがそのサイクルを完了すると、ビューコンポーネントに実行を渡します。ビューコンポーネントは、最後に実行されたアクションと同じ名前のファイルをviewsフォルダから探し出します。ビューコンポーネントは、http://アドレス/phalconフォルダ/コントローラ/アクション/パラメーターというようにURLを解析します。デフォルトのトップページ「localhost/phalcon」の場合は、http://127.0.0.1/phalcon/indexController/indexAction/を探し出しビューコンポーネントに渡しています。試しに、コントローラーとビューを下記のように修正してみます。}}$this->view->setVar()で、データを渡すことができます。第1引数に、変数名、第2引数にその変数に渡すデータを記述します。$postId?>です。href="signup">サインアップはこちらへ!</a></p>ブラウザに「http://localhost/phalcon/index/index/100」と入力してみると、下記のように表示されました。階層的なレンダリングphalcon\Mvc\Viewは、ファイルの階層をサポートし、ファルコンレンダリングビューのデフォルトのコンポーネントです。この階層は、一般的なビューと同様に、それぞれのビューテンプレートを定義する名前によってレイアウトビューを自動的に解析します。下記のように3つの階層に分かれます。Actionビューapp/views/コントローラー名/アクション名.voltこれが、アクションに関連するビューです。このビューはアクションが実行されたときにのみ表示されます。レイアウトapp/views/layouts/コントローラー名.voltこれは、コントローラに関連するビューです。これは、コントローラ内の全てのビューに対して表示されます。レイアウトで実装されている全てのコードはこのコントローラ内の全てのアクションのために再利用されます。Mainレイアウトapp/views/index.voltこれは、アプリケーション内で実行される全てのコントローラやアクションのために表示されるメインのレイアウトビューです。上記のビューを全て実装する必要はありません。phalcon\Mvc\Viewコンポーネントは、単純にファイルの階層内の次のビューレベルに移動します。app/view/layoutsフォルダ内にコントローラ名と同じビューを配置すると、コントローラごとのレイアウトとして利用することができますし、全てのアプリケーションで使用するテンプレートは、app/views/index.voltを使用します。テンプレートの使用テンプレートは、一般的なビューのコードを共有するために使用することが可能である。彼らは、コントローラのレイアウトとして機能し、だから、layoutsディレクトリにそれらを配置する必要があります。indexControllerと各テンプレートを下記のように作成してみます。{}}4行目:initialize()は、初期化メソッドです。Laravelでは、__construct()でしたね。6行目:setTemplateAfter()メソッドで、app/views/layouts/common.voltレイアウトの中にをindexビューをセットしています。10行目は、フラッシュデータを渡します。ビュー内で、$this->flash->output()で表示することができます。このコンテンツは、app/veiws/layouts/index.voltです。このコンテンツは、app/views/index/index.voltです。href="signup">サインアップはこちらへ!</a></p>ブラウザで表示すると、下記のようになります。大外枠が、メインテンプレート(app/view/index.volt)その内側が、共有テンプレート(app/views/layouts/common.volt)その内側が、コントローラテンプレート(app/views/layout/index.volt)一番内側が、アクションテンプレート(app/views/index/index.volt)かなりややこしいので、よく見てください。ややこしいということは、かなり複雑なレイアウトも簡単に作成できるということですので、きちんと覚える意義はあると思います。レンダリングレベルのコントロール上記からもわかるようにPhalcon\Mvc\Viewコンポーネントは、階層をサポートしています。ビューコンポーネントによって生成されたレンダリングのレベルを制御する必要がある場合は、Phalcon\Mvc\View::setRenderlevel()メソッドを使って制御することができます。このメソッドは、レンダリングプロセスを制御するために、コントローラやスーパービューレイヤーから呼び出すことができます。利用可能なレンダリングレベルは次の通りです。LEVEL_NO_RENDERコンテンツのあらゆる種類の生成を回避します。LEVEL_ACTION_VIEWアクションの関連づけられたビューにコンテンツを生成します。LEVEL_BEFORE_TEMPLATEコントローラテンプレートの前にコンテンツを生成します。LEVEL_LAYOUTコントローラレイアウトにコンテンツを生成します。LEVEL_AFTER_TEMPLATEコントローラテンプレートの後にコンテンツを生成します。LEVEL_MAIN_LAYOUTメインレイアウト(app/views/index.vot)のコンテンツを先制します。レンダリングレベルの無効化あなたは、レベルをレンダリングする事を恒久的または一時的に無効にすることができます。それはアプリケーション全体では一切使用されていない場合はレベルが恒久的に無効にすることができます。true);disableLevel()メソッドで、レンダリングレベルを無効にすることができます。無効化するレンダリングレベルを連想配列でture指定します。ピッキングビューPhalcon\Mvc\View::pick()メソッドを使えば、デフォルトのViewコンポーネントを上書きすることができます。}}Viewの無効化あなたのコントローラがビュー内の任意の出力を生成しない場合(または、それが一つでもあるとき)は、不必要な処理を避けビューコンポーネントを無効にすることができます。}}あなたは、手動でビューを無効にするために、レスポンスオブジェクトを返すことができます。}}シンプルレンダリングPhalcon\Mvc\View\Simpleコンポーネントは、Phalcon\Mvc\Viewに代わるコンポーネントです。Phalcon\Mvc\View\Simpleコンポーネントは、基本的にPhalcon\Mvc\Viewの性能を保っていますが、ファイルの階層機能がありません。このコンポーネントは、開発者はビューがレンダリングされるときのコントロールとその場所を持つことができます。このコンポーネントは、Voltのようなようなテンプレートエンジンで利用可能なビューの継承を活用できます。このコンポーネントを使用するには、サービスコンテナでデフォルトのViewコンポーネントと交換する必要があります。);必要なら、下記のように自動レンダリング機能を無効にすることができます。}また、このPhalcon\Mvc\View\Simpleコンポーネントをレンダリングするには、明示的に表示したいビューへの相対パスを示すrenderメソッドを呼び出す必要があります。}}パーシャルテンプレートの使用パーシャルテンプレートは、アプリケーションの異なる部分で再利用することができますシンプルな、より管理しやすいチャンクにレンダリングプロセスを破壊する別の方法です。部分的で、あなたは、独自のファイルに応答の特定の部分をレンダリングするためのコードを移動することができます。コー​​ドをより容易に理解できるように、ビューの外に詳細を移動する方法として:パーシャルを使用する1つの方法は、サブルーチンと同等に扱うことである。?></div>pertial()メソッドは、部分的な範囲内に存在する変数/パラメータの配列として二番目のパラメータを受け入れません。?>パーシャルテンプレートについては少し、詳しく調べてみたいと思います。IndexControllerおよびいくつかのビューを下記のように修正および作成します。Bootstrap3のCDNを使ってスタイルシートを読み込んでいます。$this->partial("partial/footer")?>IndexControllerのレイアウトビューにナビゲーションバーとフッターのパーシャルビューを読み込んでいます。1行目:partialメソッドの第2引数に、データを連想配列で渡しています。--></nav>viewsフォルダにpatrialフォルダを作成し、そこにnavbar.voltファイルを作成しました。Bootstrap3の公式サイトから拝借してきました。$brand?>しています。</div></nav>こちらもpartialフォルダにfooter.vlotファイルを作成しました。ブラウザで確認してみます。パーシャルはちょこっとしたところに埋め込めますから、用途が多そうですね。this->view)を使用して、各コントローラで利用可能です。あなたはsetVar()メソッドを使用してコントローラのアクションからビューに直接データを受け渡すことができます。setVar()メソッドは、ひとつの変数や配列を渡し、setVars()メソッドは、配列や多重配列を渡します。$this->view->setVar("posts",Post::find());$this->veiw->serVars(['posts'=>Post::find(),'photos'=>Phtos::find()]);setVar()メソッド(の最初のパラメータの名前)を持つ変数を使用する準備ができて、ビューに作成されます。変数は、単純な文字列、整数などの変数からそのような配列、コレクションなどのような、より複雑な構造のため、あらゆるタイプの値を使用することができます。Viewレイヤーでのモデルの使用アプリケーションモデルは、常にビュー層で利用することができます。​​に自動的にそれらをインスタンス化します。</div>あなたはビュー層でinsert()メソッドや、update()メソッドなどのモデル操作を実行することができるが、それはエラーや例外の場合には別のコントローラに実行フローを転送することができないため、勧めできません。View断片のキャシュPhalcon\Mvc\Viewは、ビューの一部またはパフォーマンスを向上させる全体のレンダリングされた出力をキャッシュしています。Phalcon\Mvc\Viewは、Phalcon\Cacheと統合して、キャッシュをフレームワークに出力する簡単な方法を提供します。あなたは、手動でキャッシュハンドラやグローバルハンドラを設定できます。}}我々がキャッシュへのキーを定義しない場合には、コンポーネントは自動的に現在レンダリングされているビューの名前をmd5で暗号化して作成します。あなたが簡単に各ビューに関連付けられたキャッシュを識別できるように、各アクションのキーを定義することをお勧めします。ビューコンポーネントは何かをキャッシュする必要がある場合には、サービスコンテナにキャッシュサービスを要求します。このサービスのサービス名規則は「viewCache」です。$cache;});ビューのキャッシュを使用する場合にはまたコントローラがビューに表示するデータを生成する処理を実行することを防止するのに有用である。これを実現するために、我々は一意キーを持つ各キャッシュを特定する必要があります。キャッシュが存在しないか、またはビュー内のデータを表示するための計算/クエリを作るために有効期限が切れていることを確認します。}}テンプレートエンジンテンプレートエンジンは、複雑な構文を使用せずにビューを作成するために、設計者を支援します。Phalconには、Voltと呼ばれる強力かつ高速なテンプレートエンジンが含まれています。phalcon\Mvc\Viewは、代わりにプレーンなPHPやボルトの他のテンプレートエンジンを使用することができます。別のテンプレートエンジンを使用して、通常はユーザーのための最終的な出力を生成するために、外部のPHPライブラリーを使用して複雑なテキストの解析を必要とする。これは通常、アプリケーションが使用しているリソースの数が増加します。外部テンプレートエンジンを使用する場合は、Phalcon\Mvc\Viewは全く同じビュー階層を提供し、それはもう少しの努力でこれらのテンプレートの中にAPIにアクセスすることは可能です。このコンポーネントは、これらのヘルプファルコンは、統一された方法でそれらの外部のテンプレートエンジンと話すのは、その統合を行う方法を見てみましょうするために、アダプターを使用しています。独自のテンプレートエンジンアダプタの作成あなたが統合したり、独自のものを作成したい場合には、多くのテンプレートエンジンがあります。最初のステップは、それ用のアダプタを作成している外部のテンプレートエンジンを使用して開始します。テンプレートエンジンアダプタはphalcon\Mvc\Viewコンポーネントとテンプレートエンジンの間のブリッジとして動作するクラスです。通常は2つだけの実装されたメソッド(__construct()メソッドとrender()メソッド)を必要とします。最初の受信は、エンジン·アダプタとアプリケーションで使用されるDIコンテナのPhalcon\Mvc\Viewインスタンスを作成します。render()メソッドは、ビューファイルへの絶対パスを受け取り、そして、ビューパラメータのセットは、$this->view->serVar()を使用します。それは必要だときには、それを読むか、必要とする可能性があります。次のように、コントローラからテンプレートエンジンを交換するか、それ以上を追加することができます。}}あなたは完全にテンプレートエンジンを交換するか、同時に複数のテンプレートエンジンを使用することができます。registerEngines()メソッドは、テンプレートエンジンを定義するデータを含む配列を受け入れます。各エンジンのキーは、別のものを区別するのに役立つ拡張機能です。特定のエンジンに関連するテンプレートファイルには、これらの拡張子を持っている必要があります。registerEngines()メソッドはコンポーネントで定義されている実行順序の関連性を定義します。Phalcon\Mvc\Viewコンポーネントは、同じ名前で拡張子の異なる2つのビューを見つけたら、最初のものだけをレンダリングします。テンプレートエンジンまたはアプリケーション内の各要求のためにそれらのセットを登録したい場合は。ビューのサービスが作成されたときに、登録できます。true);ファルコンインキュベータ上のいくつかのテンプレートエンジンのために利用可能なアダプタがあります。ビューでサービスを注入するPhalcon\DI\Injectableインスタンスの内部に含まれているすべてのビューが実行し、アプリケーションのサービスコンテナへの容易なアクセスを提供します。requestの記述方法を示しています。サービス"URL"(通常は、Phalcon\Mvc\Url)は、同じ名前のプロパティにアクセスすることによって、ビューに注入されています。alert("Done!");});</script>スタンドアロンコンポーネントファルコンのすべてのコンポーネントは、個別の構成要素として、緩く互いに結合されているので、接着剤コンポーネントとして使用することができます。$content));ViewイベントPhalcon\Mvc\ViewとPhalcon\Mvc\Viewは、EventManagerへそれが存在する場合、イベントを送信することができます、。イベントは、タイプ「ビュー」を使用してトリガされます。真偽値を返す一部のイベントは、アクティブな動作を停止することができます。次のイベントがサポートされています。次の例では、このコンポーネントにリスナーをアタッチする方法を示しています。​​方法を示しています。TidyPlugin());以上、公式サイトを私なりに訳してみました。意味のわからないところはほとんどGoogle先生に頼っていますので、間違っている可能性が多分にありますので、ご了承ください。本日のまとめ本日理解できたことを以下にまとめてみました。$this->partial('patial/navbar',['brand'=>'Winroad徒然草'])?>コントローラからビューへ値を引き渡すには、setVar()、setVars()メソッドを使う$this->view->setVar('name','中田');$this->view->setVar('users',User::find());$this->view->setVars(['users'=>User::find(),'posts'=>Post::find()]);ビューレイヤー内でモデルを使用することができるViewはデフォルトでキャッシュされているViewキャッシュは手動で、キャッシュハンドラーやグローバルハンドラーを設定できるPhalconにはデフォルでVoltと呼ばれる強力なテンプレートエンジンが含まれている。簡単に独自のテンプレートエンジンに変更することができるViewイベントの発生や時期は制御することができる本日は、以上です。コメントをキャンセルメールアドレスが公開されることはありません。*サイト関連記事Phalconのチュートリアル1今日は、Phalconの公式サイトのチュートリアル1に沿って勉強していきたいと思います。...PhalconのURLとパスの生成Phalcon\Mvc\Urlコンポーネントは、Phalconアプリケーションで生成されたURLの責任コンポーネントです。それは、ルートに基づいて生産物の独立のURLです。...Phalconのチュートリアル2(INVOアプリ)その3今日は、Phalconチュートリアル2(INVOアプリ)の最終日です。最終日は、CRUDを使用した作業を中心に勉強していきたいと思います。...Phalconのチュートリアル2(INVOアプリ)その1今日から、何回かにわけてPhalconの公式サイトのチュートリアル2(INVOアプリ)について勉強していきたいと思います。Githubの下記のサイトからINVOアプリをダウンロードします。AFFINGER5.。