2012-04-25 14 views
0

私はルーティングの周りに頭を抱くようにしてきました。そのまさにその理由のために小さなアプリケーションを構築していますが、問題につまずいてしまいました。Zend Frameworkリダイレクトとルート、何らかの理由で動作しない

全体的なテストの目的は、 'hostname/content/index/add'というURLを隠し、 'hostname/wms/content/add'のようなユーザにとって理解しやすいURLにすることでした。

しかし、今私は$ this-> url()メソッドを使ってリダイレクトできません。しかし、何とかsomelinkのような通常のリンクが動作します。

どのように動作するかをテストするために、application.iniにいくつかのルートを構築しました。それは私がホスト名/ WMS /コンテンツを入力すると

resources.router.routes.contentroute.route = "/wms/content" 
resources.router.routes.contentroute.defaults.module = content 
resources.router.routes.contentroute.defaults.controller = index 
resources.router.routes.contentroute.defaults.action = index 

resources.router.routes.vacaturesroute.route = "/wms/vacatures" 
resources.router.routes.vacaturesroute.defaults.module = vacatures 
resources.router.routes.vacaturesroute.defaults.controller = index 
resources.router.routes.vacaturesroute.defaults.action = index 

は、だから私は、コンテンツモジュールのIndexControllerにリダイレクトし、それがIndexActionだ...空想何もありません。これは実際にIndexControllerの具体的な行動に向けてリダイレクトすることは3つのリンクのために働いていないが、この

​​

などのコンテンツモジュールを指して、私の見解では、すべてのリンクのために正常に動作し、非常にページのホスト名/ WMS /コンテンツ。

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add'));?>">Add new content</a> 

代わりに、実際に私がホスト名/ WMS /コンテンツにリダイレクトIndexControllerでの追加アクションの方にリダイレクトするには、ウィッヒは私がから来てるページです。

これがなぜ起こっているのか、誰かがこれを解決するための方法を知っている人は誰ですか?それとも私は完全にこれに間違った方法で近づいていますか?

答えて

1

まず、経路は静的経路です。あなたはそれらを交換する必要があります。

resources.router.routes.contentroute.route = "/wms/content/:action/*" 
resources.router.routes.contentroute.defaults.module = content 
resources.router.routes.contentroute.defaults.controller = index 
resources.router.routes.contentroute.defaults.action = index 

その後、あなたはあなたのルートの名前を指定し、リセット引数にtrueを渡す必要があります。

$this->url(
    array('module'=>'content', 'controller'=>'index','action'=>'add'), 
    'contentroute', 
    true 
); 
+0

ありがとう!これは確かに問題を解決しました。私は、ルートに '/:action/*'を追加する必要があることを知らなかったり、ルート自体を指定する必要がありました。 –

0

が、これは代わりに

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add','module'=>'xyz'),null,true);?>">Add new content</a> 

があなたのモジュール名でXYZを交換してみてください。

+0

あなたが名前のparamにnullを渡すと、それはデフォルトルートを取ります。 – Maxence

+0

@MaxenceルートはこのURLには定義されていません。 –

+0

あなたは正しいです。私は彼の設定が間違っていると思うが、あなたの答えはこの場合に働く。ごめんなさい。 – Maxence

関連する問題