2012-10-17 11 views
7

申し訳ありませんコントローラから、オブジェクトのZend \ビュー\ヘルパー\のURLと協力して、私はロシア私の悪い英語のための

から来たんだ

は、Zend Frameworkの2 ...コントローラで サンプルを学ぶために始めた、readAction():その結果、

use Zend\View\Helper\Url; 

.... 

$helperUrl = new Url(); 
$address = $helperUrl('news', array('action' => 'index')); 

、スローされた例外:

Zend\View\Exception\RuntimeException 

File: 
    W:\home\zf2\vendor\zendframework\ 
     zendframework\library\Zend\View\Helper\Url.php:80 
Message: 
    No RouteStackInterface instance provided 

、私を助けてください。 私は間違っていますか?

答えて

12

コントローラでビューヘルパーを使用することはできません。そうしなくてもかまいません。 Urlコントローラプラグインもほぼ同じです。

コントローラーのプラグインを使用すると、この(コントローラのアクション・コンテキスト)のようにそれらを使用することができ、呼び出し可能なクラスです:

$url = $this->url()->fromRoute($route, $params, $options, $reuseMatchesParams); 

すべてのパラメータはオプションです。詳細については、コードZend\Mvc\Controller\Plugin\Urlをご確認いただくか、docsをお読みください。

+3

ない真に役立ちます。あなたはコントローラでビューヘルパーを使うことができますが、ofcはあまり良いアイデアではありません: $ uVH = $ this-> getServiceLocator() - > get( 'viewhelpermanager') - > get( 'url'); $ routeUrl = $ uvh( '経路名'、配列( 'param1' => 'param1')); など –

3

ヘルパーとプラグインは、通常はPluginManagerによって管理されるため、直接インスタンス化することはできますが、通常は使用しないでください。 PluginManagerはServiceManagerのサブクラスであり、標準的な共同作業者の注入、依存関係注入を提供するための工場の使用など、プラグインの作成に関する多くの機能を提供します。

Urlヘルパーの場合、設定されたルータが注入されていることを保証するファクトリがあります。直接インスタンス化すると、これを持たず、そのジョブを実行できなくなりますあなたが気づいたように!

Daniel氏によれば、コンテキストに適したプラグインを入手していることを確認したい場合もあります。あなたがコントローラにいる場合は、あなたのために仕事をするコントローラプラグインがあるかどうかを確認してください。ダニエルは彼のポストのドキュメントにリンクしています。

+0

あなたは頭痛から私を救った:-) –

0

私は既に受け入れられた答えがあることを知っていますが、私のような初心者の負担を軽減するためにこれを投稿します。

私はビューレンダラーとしてsmartyを使用していますが、スマートではビューでPHPコードを使用することはできません。したがって、すべてがコントローラで実行され、変数に変数が割り当てられ、ビューに渡されます。

/zf2/index.php/album/add 
/zf2/index.php/album/edit 
/zf2/index.php/album/delete 
:これはの価値を持つことになります

$url = $this->url()->fromRoute('album',array('action'=>'add')); 
$url = $this->url()->fromRoute('album',array('action'=>'edit')); 
$url = $this->url()->fromRoute('album',array('action'=>'delete')); 

:あなたはZendの2のチュートリアルに従っている場合、それはこのようになります

$url = $this->url()->fromRoute('route',array('name'=>'route-name')); 

あなたはこれを使用することができます

ご覧のとおり、サーバー名を追加する必要があります。サーバー名を追加する必要がありますURL:

$url = $uri = $this->getRequest()->getUri(); 
$url = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 

全体的に、コードスニペットは、次のようになります。生産するために

$url = $uri = $this->getRequest()->getUri(); 
$url = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 
$url .= $this->url()->fromRoute('album',array('action'=>'add')); 

http://yourservername/zf2/index.php/album/add 

希望これは初心者ZF2ユーザー

関連する問題