Kohanaでのコンポーネントの実装

私たちのサイトにウィジェットがあるという状況を想像してください。 このウィジェットは、各ページのサイトで繰り返されます。 このウィジェットを忘れて他の問題に焦点を当てるコードをどのように設計しますか?



もちろん、テンプレートからデータ領域にアクセスする余裕はありません。そうしないと、非識字を示します。 多くのフライバーには、これに対する独自のソリューションがあります。 しかし、symfonyから類推します。 後者には、コンポーネントのようなものがあります。 次のように見えます:コンポーネントの名前でテンプレートの静的メソッドを呼び出し、同じ名前のコントローラーが呼び出され、データがデータ領域から抽出されてテンプレートフラグメントに転送され、後者がレンダリングされ、コードがネイティブテンプレートに挿入されます。 したがって、MVCアーキテクチャは相互に組み込まれています。 私はこのスキームを少し単純化したとすぐに言いますが、その本質を確実に伝えました。



だからここに。 Kohanaには既成のソリューションはありません。 したがって、3行のコードで解決されるコンポーネントを実装する簡単な方法を書きました。



など。 widget.phpヘルパーを作成し、application / helpersフォルダーにスローします。 ヘルパーの内容は次のとおりです。

Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  1. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  2. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  3. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  4. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  5. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  6. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  7. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  8. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  9. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  10. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>



  11. Copy Source | Copy HTML <?php class widget { public static function paste( $className , $functionName , $parameters = null) { $controllerName = $className . '_Controller' ; $controller = new $controllerName ; $controller -> $functionName ( $parameters )->render( true ); } } ?>





コントローラークラスでは、テンプレートをレンダリングする代わりに通常のコンテンツメソッドのみを記述し、それを返します。つまり、returnを返します。 私は常にわずかにオーバーライドされたTemplate_Controllerコントローラーを使用します。 コントローラーメソッドの例:



Copy Source | Copy HTML



  1. パブリック関数 widget_example()
  2. {
  3. return View :: factory( '_example.php'array'var' => 'Hello world!' ));
  4. }




混同しないように、テンプレートの名前は下線で示します。

これで、どのテンプレートにも、書くだけで十分です。



Copy Source | Copy HTML



  1. <?php widget :: paste( 'Index''widget_example'?>




これで終わりです。この行の代わりに、ウィジェットがレンダリングされます。 そのように。 必要に応じて、3番目の引数で必要な値を配列の形式でコンポーネントに渡すことができます。

ところで、部分的な(symfonyのような)はテンプレートに単純に含めることで実装されます

Copy Source | Copy HTML



  1. <?php View :: factory( 'template' )-> render() ?>


partialは、テンプレートを単純に含めることです(知らない人のために)

PS Smarty(など)とNative Templateについてのホリバーを繁殖させないでください。

Kohanaに関しては多くの開発があります-時間の経過とともに、 ブログで一連の記事をここに公開します。

UPD。 ブログの投稿を小花に転送することはできません。 カルマが足りない



All Articles