7

私の悪い英語でごめんなさい、私はロシアから来ました

zendフレームワーク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

私を助けてください。私が間違っているのは何ですか?

4

3 に答える 3

13

コントローラでviewhelperを使用することはできません-使用する必要はありません。Urlほぼ同じことを行うコントローラープラグインもあります。

コントローラプラグインは呼び出し可能なクラスであり、次のように使用できます(コントローラのアクションコンテキスト)。

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

すべてのパラメーターはオプションです。詳細については、コードをチェックインするか、ドキュメントZend\Mvc\Controller\Plugin\Urlをお読みください。

于 2012-10-17T07:18:14.473 に答える
3

ヘルパーとプラグインは直接インスタンス化できますが、通常はPluginManagerによって管理されるため、通常はインスタンス化しないでください。PluginManagerはServiceManagerのサブクラスであるため、標準のコラボレーターの注入、依存性注入を提供するためのファクトリの使用など、プラグインの作成に関する多くの機能を提供します。

URLヘルパーの場合、構成済みのルーターが挿入されていることを確認するファクトリがあります。直接インスタンス化すると、これは発生せず、お気づきのとおり、ルーターはその役割を果たせなくなります。 !!

ダニエルが指摘したように、コンテキストに適したプラグインを取得していることも確認する必要があります。コントローラーを使用している場合は、その役割を果たしてくれるコントローラープラグインがあるかどうかを確認してください。ダニエルは彼の投稿のドキュメントにリンクしました。

于 2012-10-19T03:40:52.287 に答える
0

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

私はsmartyをビューレンダラーとして使用していますが、smartyではビューでphpコードを使用できないため、すべてをコントローラーで実行し、変数に割り当ててからビューに渡す必要があります。

あなたはこれを使うことができます:

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

zend 2のチュートリアルに従っている場合は、次のようになります。

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

これの値は次のとおりです。

/zf2/index.php/album/add
/zf2/index.php/album/edit
/zf2/index.php/album/delete

ご覧のとおり、サーバー名を追加する必要があります。これは、ルート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ユーザーに役立つことを願っています

于 2014-01-27T09:37:19.043 に答える