0

だから私はZend Frameworkについてできる限り吸収しようと最善を尽くしてきました.Zend Frameworkは私にとってかなり新しいものです.最初の試みから約2週間で、これまでのところうまくいっています.

しかし、私は理解できない小さな問題に遭遇しました。

これが取引です。私は、いくつかのモジュールを含む標準のZend Frameworkプロジェクトを持っています。このような :

- Project
- - Application
- - - configs
- - - controllers
- - - - IndexController
- - - - WMSController
- - - forms
- - - layouts
- - - models
- - - modules
- - - - content
- - - - - controllers
- - - - - - IndexController
- - - - - models
- - - - - views
- - - - - Bootstrap
- - - views
- - - bootstrap
- - public

etc..

これで、WMSController のビューに簡単なテスト リンクが設定されました。これは、誰かがクリックしてコンテンツ モジュールの IndexController に誘導することになっています。

<a href="wms/content"> test link to content module</a>

このリンクは、現時点では存在しない WMSController のコンテンツ アクションである localhost/wms/content を指しているため、おそらく機能しないことがわかります。

今私がしたいのは、wms/content が実際に content モジュールの IndexController を指すようにすることです。なんで?ユーザーが localhost/content と入力して、WMS の一部であるコンテンツ モジュールにアクセスすることを望んでいません。最初に WMS コントローラーを通過するように強制したいのです。

ブートストラップまたはオートローダーを使用したソリューションであるルーティングについて多くのことを読みましたが、それらのほとんどすべてが、特定のコントローラーの特定のアクションに特定の URL をポイントするのに役立ちます。

私が欲しいのは、特定のモジュールの特定のコントローラーの特定のアクションを指す URL です。

注: 他のすべてのコントローラーとビューは、まだ変更が加えられていないデフォルトで生成されたバージョンのままです!

誰かがこれがどのように行われるかのコード例を私に示すことができれば、それは大歓迎です!

4

2 に答える 2

1

私の理解が正しければ、単に/wms/contentモジュールcontent controller Index action indexを指し示すだけです。これは、単純なルーターが機能するケースです (少なくとも、より複雑になるまでは)

application.ini に次の行を追加します。

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

これは、カスタム ルートを作成する最も簡単な方法です。
*注: * 左から 4 番目のパラメーターはルートの名前なので、ルート名を使用できるメソッド (url() ヘルパーなど) で使用する場合は、ルート名だけを使用できます。
$this->url(array(), 'content');

これは、名前付きルートを使用する方法です。個人的には、モジュールの名前をwmsに変更し (可能かつ実用的であれば)、デフォルトの Index コントローラーからそこにリダイレクトすることを検討します。名前付きルートとカスタムルートを使い始めると、やめるのは難しいからです...

于 2012-04-19T09:38:24.470 に答える
0

というご質問から

最初に WMS コントローラを通過させたい

できることは 1 つです。ユーザーが localhost/content/** と入力するたびに WMSController で実行したいことは何でも、モジュール内のすべてのコントローラーの親クラス: 'CONTENT' に配置できます。このようにして、このコントローラーにリクエストが来るたびに、何かをチェックしたり、操作を実行したりできます (ユーザーが他のモジュールに行きたいかどうかに関係なく)。

class Content_AnyController extends MyControllers_Controller_Action_Admin{ .... }

どこ

class Reviewmo_Controller_Action extends Zend_Controller_Action{ 
    public function init(){
    //Things you want to do each time
    }

}

WMSController の ContentAction に単純にリダイレクトしたい場合は、そのコントローラーに単純にリダイレクトできるため、これが達成したいことだと思います。

于 2012-04-18T14:25:39.910 に答える