2013-05-14 7 views
6

私はビューからアプリケーションの設定にアクセスしたかったのです。 ZF 2でどのように達成できますか?Zend Framework 2(zf2)のビューからApplication Configにアクセスするには?

+0

コントローラアクションから渡しますか?そうでない場合は、この例とほぼ同じ方法でビューヘルパーを作成し、設定を挿入してください。http://stackoverflow.com/questions/16082529/calling-a-method-in-model-from-layout-in-zendframework- 2/16082884#16082884次に、必要なものにアクセスするヘルパーメソッドを記述します。 – Crisp

+0

ビューヘルパーからどのようにアクセスできますか? –

+0

リンク先の例を見てください。 'ModelService'を' config'に置き換えて、プロキシがConfig配列にヘルパーを持っています。次に、配列にアクセスするヘルパーのためのメソッドを記述し、それらをビューで呼び出すだけです。 – Crisp

答えて

8

実際には、ビュー内でアプリケーション設定にアクセスする必要はありません。 MVCでは、データ(出力)の表示/レンダリングのみを担当し、ビジネスロジックやアプリケーションロジックは含まないビューです。

あなたが本当にあなたは、単にあなたのコントローラ内でこのような何かを表示するために渡すことができることをやりたい場合は:あなたのview.phtmlファイルにそう

<?php 
namespace YourModule\Controller; 

use Zend\View\Model\ViewModel; 

// ... 

public function anyAction() 
{ 
    $config = $this->getServiceLocator()->get('config'); 
    $viewModel = new ViewModel(); 
    $viewModel->setVariables(array('config' => $config)); 
    return $viewModel; 
} 

// ... 
?> 

を。

<div class="foo"> 
... 
<?php echo $this->config; ?> 
... 
</div> 
+2

あなたのコントローラにビジネスロジックを持たせるべきではありませんが、設定はまだレンダリング/表示ロジックに影響するかもしれません。設定値は、どのテーマをレンダリングすべきかをビューに伝えます。私は、ViewManagerにはグローバル設定をServiceManagerから引き出すビューではなく、ViewModelを使用して、可能な限り細かい設定値をビューに送信するコントローラでなければならないことにはまだ同意しています。 –

7

ビューヘルパーを作成する必要があります。

config.phpの

<?php 
namespace Application\View\Helper; 

class Config extends \Zend\View\Helper\AbstractHelper 
{ 
    public function __construct($config) 
    { 
     $this->key = $config; 
    } 

    public function __invoke() 
    { 
     return $this->config; 
    } 

} 

Module.phpまたはtheme.config.php

return array(
    'helpers' => array(
    'factories' => array(
     'config' => function ($sm) { 
      return new \Application\View\Helper\Config(
        $sm->getServiceLocator()->get('Application\Config')->get('config') 
      ); 
     }, 
    ) 
), 
); 

次にあなたが任意のビューで設定変数を使用することができます。 ZF 2.2.1、あなただけ...何も

# module.config.php 
... 
'view_helpers' => array(
    'invokables' => array(
    'yourHelper' => 'Application\View\Helper\YourHelper', 
), 

)、 を注入withtutあなたのヘルパーを追加することができます(つまり、以前のバージョンでは可能だと確信していない)

として

echo $this->config()->Section->key; 
7

インタフェースZend\ServiceManager\ServiceLocatorAwareInterfaceを実装してYourHelperを書き込みます。インターフェースの2つのメソッド(単純なセッターとゲッター)を実装する必要があります。これで、サービスロケータにアクセスして、コンフィギュレーションを取得することができます:http://robertbasic.com/blog/working-with-custom-view-helpers-in-zend-framework-2

namespace Application\View\Helper; 

class YourHelper implements Zend\ServiceManager\ServiceLocatorAwareInterface 
{ 

    public function __invoke() 
    { 
    $config = $this->getServiceLocator()->getServiceLocator()->get('Config'); 

    // $config is the object you need 

    return $config; 
    } 

    public function getServiceLocator() 
    { 
    return $this->serviceLocator; 
    } 

    public function setServiceLocator(\Zend\ServiceManager\ServiceLocatorInterface $serviceLocator) 
    { 
    $this->serviceLocator = $serviceLocator; 
    return $this; 
    } 
} 

詳細情報設定にアクセスするためのヘルパーここhttps://gist.github.com/elvisciotti/6592837

0

私はコントローラプラグインやビューヘルパーでモジュールを作成しましたコントローラとビューの設定を読み込むためのものです。 GitHub link __ Composer link

あなたは簡単に使用できます。

echo $this->configHelp('key_from_config'); //read specific key from config 

$config = $this->configHelp(); //return config object Zend\Config\Config 
echo $config->key_from_config; 
関連する問題