ZendFramework-ビューレイヤー

ビューレイヤーは、MVCアプリケーションのプレゼンテーションレイヤーです。アプリケーションロジックをプレゼンテーションロジックから分離します。典型的なPHPWebアプリケーションでは、すべてのビジネスロジックとデザインが混在しています。混合により、小さなプロジェクトでの開発を迅速化できます。しかし、多くの高レベルのアーキテクチャが関係する大規模なプロジェクトでは、惨めに失敗します。Webアプリケーションの設計を変更するには、開発者はビジネスロジックにも取り組む必要があります。これは壊滅的であり、ビジネスロジックの破壊につながる可能性があります。

Zend Frameworkは、よく考えられた、クリーンで、柔軟性があり、拡張可能なViewレイヤーを提供します。ビューレイヤーは、個別のモジュールとして利用できます。Zend/View とうまく統合します Zend/Mvcモジュール。Zend View Layerは、相互にうまく相互作用する複数のコンポーネントに分割されています。

そのさまざまなコンポーネントは次のとおりです-

  • Variables Containers −ビューレイヤーのデータを保持します。

  • View Models −可変コンテナとデザインテンプレートを保持します。

  • Renderers −ビューモデルからデータとテンプレートを処理し、デザイン表現を出力します。おそらく最終的なhtml出力です。

  • Resolvers −レンダラーが使用できるように、ビューモデルで使用可能なテンプレートを解決します。

  • View (Zend\View\View) −リクエストをレンダラーにマップし、次にレンダラーをレスポンスにマップします。

  • Rendering Strategies −リクエストをレンダラーにマップするためにビューによって使用されます。

  • Response Strategies −レンダラーを応答にマップするためにビューによって使用されます。

ビューレイヤー、 View を処理します ViewModel、を使用してテンプレートを解決します Resolver、を使用してレンダリングします Rendering Strategy そして最後にそれを使用して出力します Response Renderer

レイヤー構成の表示

コントローラと同様に、Viewレイヤーは–と呼ばれるモジュールの構成ファイルで構成できます。 module.config.php。主な構成は、テンプレートを配置する場所を指定することです。これは、「module.config.php」に次の構成を追加することで実現できます。

'view_manager' => [ 
   'template_path_stack' => ['tutorial' => __DIR__ . '/../view',], 
]

デフォルトでは、ビューレイヤーはそのすべてのコンポーネントに対してデフォルトの動作をします。たとえば、ViewModel「小文字モジュール名/小文字コントローラー名/小文字アクション名」ルールにより、テンプレートルート内のコントローラーのアクションのテンプレート名を解決します。ただし、これはsetTemplate() ViewModelのメソッド。

コントローラーとビューレイヤー

デフォルトでは、コントローラーはビューレイヤーにデータを送信する必要はありません。テンプレートを適切な場所に書き込むだけで十分です。

たとえば、この例では、 TutorialController、テンプレートは次の場所に配置する必要があります myapp/module/Tutorial/view/tutorial/tutorial/index.phtml。ザ・index.phtmlPHPベースのテンプレートを参照し、PHPRendererによってレンダリングされます。次のような他のレンダラーがありますJsonRenderer にとって json 出力と FeedRenderer にとって rss そして atom 出力。

完全なリストは次のとおりです-

<?php  
namespace Tutorial\Controller;  
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel;  
class TutorialController extends AbstractActionController { 
   public function indexAction() { 
   } 
}

Zendアプリケーションテンプレート

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
</div>

最後に、正常に完了しました Tutorial モジュールとURLを使用してアクセスできます– http://localhost:8080/tutorial

ビューレイヤーへのデータの受け渡し

データをビューレイヤーに送信する最も簡単な方法は、 ViewModel引数。変更されたindexAction 方法は次のとおりです-

public function indexAction() { 
   $view = new ViewModel([ 
      'message' => 'Hello, Tutorial' 
   ]);  
   return $view; 
}

今、変更します index.phtml 次のようにファイル-

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
   <h4><?php echo $this->message?></h4> 
</div>

ヘルパーを表示

ビューヘルパーは、テンプレートで使用される小さなアトミック関数を作成するために使用されます。Zendフレームワークは、標準のビューヘルパーを作成するためのインターフェイスZend \ View \ Helper \ HelperInterfaceを提供します。

HelperInterfaceには2つのメソッドしかありません。

  • setView() −このメソッドは、Zend \ View \ Renderer \ RendererInterfaceインスタンス/実装を受け入れます。

  • getView() −そのインスタンスを取得するために使用されます。

の完全なコードリスト HelperInterface 次のとおりです-

namespace Zend\View\Helper;  
use Zend\View\Renderer\RendererInterface as Renderer;  
interface HelperInterface { 
   /** 
      * Set the View object 
      * 
      * @param  Renderer $view 
      * @return HelperInterface 
   */ 
   public function setView(Renderer $view);  
   /** 
      * Get the View object 
      * 
      * @return Renderer 
   */ 
   public function getView(); 
}

ビュースクリプトでヘルパーを使用するには、を使用してヘルパーにアクセスします $this->helperName()

ビルトインヘルパー

Zend Frameworkは、さまざまな目的のために多くの組み込みヘルパー関数を提供します。で利用可能なビューヘルパーの一部zend-mvc 次のとおりです-

URL

URLヘルパーは、アプリケーションで定義されたルートに一致するURLを生成するために使用されます。

URLヘルパーの定義は次のとおりです。

$this->url($name, $params, $options, $reuseMatchedParameters)

たとえば、チュートリアルモジュールでは、ルートの名前は次のようになります。 tutorial そしてそれは2つのパラメータを持っています action そして id。以下に示すように、URLヘルパーを使用して2つの異なるURLを生成できます。

<a href = "<? = $this->url('tutorial'); ?>">Tutorial Index</a>  
<a href = "<? = $this->url('tutorial', ['action' => 'show', 'id' =>10]); ?>"> 
   Details of Tutorial #10 
</a>

結果は次のようになります-

<a href = "/tutorial">Tutorial Index</a>  
<a href = "/tutorial/show/10"> Details of Tutorial #10</a>

プレースホルダー

プレースホルダーヘルパーは、ビュースクリプトとビューインスタンスの間でコンテンツを永続化するために使用されます。最初にデータを設定し、後の段階で使用するオプションを提供します。

たとえば、次のように設定できます company name そしてそれを他のすべての場所で使用します。

<?php $this->placeholder('companyname')->set("TutorialsPoint") ?>  
<?= $this->placeholder('companyname'); ?>

プレースホルダーは、PHPの配列とオブジェクトから複雑なコンテンツを生成するための高度なオプションのいくつかを提供します。テンプレート自体の特定のセクションをキャプチャするオプションもあります。

たとえば、次のコードは、間にあるテンプレートの結果をキャプチャして、 productlist プレースホルダー。

Class – Product

class Product { 
   public $name; 
   public $description; 
}

Controller

$p1 = new Product(); 
$p1->name = 'Car';  
$p1->description = 'Car';  
$p2 = new Product(); 
$p2->name = 'Cycle'; 
$p2->description = 'Cycle';  
$view = new ViewModel(['products' => $products]);

Template

<!-- start capture --> 
<?php $this->placeholder('productlist')->captureStart(); 
   foreach ($this->products as $product): ?> 
<div> 
   <h2><?= $product->name ?></h2> 
   <p><?= $product->description ?></p> 
</div> 
<?php endforeach; ?> 
<?php $this->placeholder('productlist')->captureEnd() ?> 
<!-- end capture -->  
<?= $this->placeholder('productlist') ?>

Result

<div class = "foo"> 
   <h2>Car</h2> 
   <p>Car</p> 
</div>
<div class = "foo"> 
   <h2>Cycle</h2> 
   <p>Cycle</p> 
</div>

Doctype

Doctypeヘルパーは、さまざまなhtmlDoctypeを生成するために使用されます。それは具体的な実装ですPlaceholderヘルパー。doctypeは、ブートストラップファイルと構成ファイルで設定できます。

基本的な使い方を以下に示します-

Application Bootstrap file

use Zend\View\Helper\Doctype;  
$doctypeHelper = new Doctype(); 
$doctypeHelper->doctype('XHTML5');

Module Configuration

// module/Application/config/module.config.php: 
return [ 
   /* ... */ 
   'view_manager' => [ 
      'doctype' => 'html5', 
      /* ... */ 
   ], 
];

Template

<?php echo $this->doctype() ?>

HeadTitle

HeadTitleヘルパーは、htmlタイトル要素を生成するために使用されます。の具体的な実装ですPlaceholderヘルパー。Zendには、モジュール構成ファイルにタイトルを設定するオプションがあり、サイト、モジュール、コントローラー、アクションなどの任意のレベルで設定できます。HeadTitleの部分的なコードは次のとおりです。

Module

headTitleHelper->append($action); 
$headTitleHelper->append($controller); 
$headTitleHelper->append($module); 
$headTitleHelper->append($siteName);

Template

<?= $this->headTitle() ?>

Result

action - controller - module - Zend Framework

HeadMeta

HeadMetaヘルパーは、htmlメタタグを生成するために使用されます。これは、プレースホルダーヘルパーの具体的な実装です。

Template

<?php 
   $this->headMeta()->appendName('keywords', 'turorialspoint, zend framework, php');  
   echo $this->headMeta() 
?>

Result

<meta name = "keywords" content = "tutorialspoint, zend framework, php" />

HeadLink

HeadLinkヘルパーは、外部リソースを含めるためのhtmlリンクを生成するために使用されます。これは、プレースホルダーヘルパーの具体的な実装です。

Template

<?php 
   // setting links in a view script: 
   $this->headLink(['rel' => 'icon', 'href' => '/img/favicon.ico'], 'PREPEND') 
      ->appendStylesheet('/styles/site.css') 
      ->prependStylesheet('/styles/mystyle.css', 'screen', true, ['id' => 'mystyle']);  
   
   // rendering the links from the layout: 
   echo $this->headLink(); 
?>

Result

<link href = "/styles/mystyle.css" media = "screen" rel = "stylesheet" 
   type = "text/css" id = "mystyle"> 
<link href = "/img/favicon.ico" rel = "icon"> 
<link href = "/styles/site.css" media = "screen" rel = "stylesheet" type = "text/css">

HeadStyle

HeadStyleヘルパーは、インラインCSSスタイルを生成するために使用されます。これは、プレースホルダーヘルパーの具体的な実装です。

Template

<?php $this->headStyle()->appendStyle($styles); ?>  
<?php echo $this->headStyle() ?>

HeadScript

HeadScriptは、インラインスクリプトを生成するため、または外部スクリプトを含めるために使用されます。これは、プレースホルダーヘルパーの具体的な実装です。

Template

<? $this->headScript()->appendFile(‘/js/sample.js’);?>  
<?php echo $this->headScript() ?>

InlineScript

InlineScriptは、htmlテンプレートのheadセクションとbodyセクションの両方でスクリプトを生成するために使用されます。これはHeadScriptから派生しています。

HTMLList

HTMLListは、順序付きリストと順序なしリストを生成するために使用されます。HTMLListの定義は次のとおりです-

Definition

htmlList($items, $ordered, $attribs, $escape)

Template

$items = [ 
   '2015', 
   ['March', 'November'], 
   '2016', 
];  
echo $this->htmlList($items);

Result

<ul> 
   <li>2015 
      <ul> 
         <li>March</li> 
         <li>November</li> 
      </ul> 
   </li> 
   <li>2016</li> 
</ul>

サイクル

サイクルは、ループ環境で代替を生成するために使用されます。割り当て、次、前の機能があります。

Controller

$view = new ViewModel(['message' => 'Hello, Tutorial', 'data' => array('One', 'Two')]);

Template

<?php $this->cycle()->assign(['#F0F0F0', '#FFF'], 'colors'); ?>

<table>
   <?php foreach ($this->data as $datum): ?>
   <tr style = "background-color: <?= $this->cycle()->setName('colors')>next() ?>">
      <td><?= $this->escapeHtml($datum) ?></td>
   </tr>
   <?php endforeach ?>
</table>

Result

<table> 
   <tr style = "background-color: #F0F0F0"> 
      <td>One</td> 
   </tr> 
   <tr style = "background-color: #FFF"> 
      <td>Two</td> 
   </tr> 
</table>

その他の重要な組み込みヘルパーは次のとおりです。

  • BasePath − BasePathは、アプリケーションのルートのパブリックフォルダのパスを生成するために使用されます。

  • Partial −部分は、特定のテンプレートを独自の変数スコープでレンダリングするために使用されます。

  • PartialLoop − PartialLoopはPartialに似ていますが、ループ環境で使用されます。

  • Identity − IDは、認証サービスからログインユーザーのIDを取得するために使用されます。

  • JSON− JSONは、出力がJSON形式である安らかな環境で使用されます。適切なHTTPヘッダーを発行し、レイアウトの概念を無効にします。

Zend Frameworkには、次のような多くのヘルパーがまだあります。 i18n helper, form helpers, pagination helpers, navigation helpers、など。

ビューヘルパーの作成

Zend Frameworkは、組み込みの AbstractHelper 実装 HelperInterface ビューヘルパーを作成します。

新しいヘルパーを作成する手順は次のとおりです。

  • Step 1 −クラスZend \ View \ Helper \ AbstractHelperを拡張します。

  • Step 2 −オーバーライド __invoke() 関数。

  • Step 3 −で構成を設定します module.config.php file

  • Step 4 −ビュースクリプトでビューヘルパーを使用します。

作成しましょう TestHelper

でヘルパーフォルダを作成します myapp/module/Tutorial/src/View directory。書くTestHelper ヘルパーディレクトリ内、 TestHelper.php

完全なリストは次のとおりです-

<?php  
namespace Tutorial\View\Helper; 
use Zend\View\Helper\AbstractHelper; 
class TestHelper extends AbstractHelper { 
   public function __invoke() { 
      $output = "I am from test helper"; 
      return htmlspecialchars($output, ENT_QUOTES, 'UTF-8'); 
   } 
}

で構成を設定する module.config.php

'view_helpers' => [ 
   'aliases' => [ 
      'testHelper' => View\Helper\TestHelper::class, 
   ], 
   'factories' => [ 
      View\Helper\TestHelper::class => InvokableFactory::class, 
   ],
],

新しく作成したものを使用する TestHelper の中に about スクリプトを表示します。

<?= $this->testHelper() ?>