0

私のサイトではプロジェクトを作成でき、複数のプロジェクトタイプ(プロジェクトテンプレートなど)があります。

私がやりたいのは、すべてのプロジェクトタイプを処理する単一のアクションを持つことです。現在、プロジェクトタイプごとに、個別のアクションとビューがあります。それらすべてを1つのアクションにルーティングしたいと思います。

これが私がこれまでに思いついたものですが、それはうまくいきません。

resources.router.routes.new_project.route = "/project/new-:id"
resources.router.routes.new_project.defaults.controller = "project"
resources.router.routes.new_project.defaults.module = "site"
resources.router.routes.new_project.defaults.action = "new"
resources.router.routes.new_project.reqs.id = "([0-9]+)"

http://mysite.com/project/new-1したがって、URLをまたはのようにしたいと思いますhttp://mysite.com/project/new-2。ここで、1と2はプロジェクトタイプIDです。これらのURLは両方ともnewprojectコントローラーで呼び出されるアクションにマップする必要があります。

このようなことはZF1.11で可能ですか?

4

2 に答える 2

2

希望する URL 形式は、正規表現ルートを使用して簡単に実現できます。

resources.router.routes.new_project.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.new_project.route = "project/new-(\d+)"
resources.router.routes.new_project.defaults.controller = "project"
resources.router.routes.new_project.defaults.module = "site"
resources.router.routes.new_project.defaults.action = "new"
resources.router.routes.new_project.map.1 = "project_type_id"
resources.router.routes.new_project.reverse = "project/new-%s"

その後、コントローラーで使用して ID にアクセスでき$this->_getParam('project_type_id')ます。

于 2013-03-07T13:36:58.263 に答える
1

URL変数をパーツとして指定することはできないようです-それらはセグメント全体を占める必要があります(セグメントはで区切られます/)-つまり、最初の文字はaでなければならず:、名前は値の残りの部分になります。

(行158..196)の関数__constructを参照してください- (セグメント内のどこかで検索するのではなく)一致するかどうかのみをチェックします。Zend/Controller/Router/Route.phpsubstr($part, 0, 1):


これは、同じアクションを使用するにはZendで使用する必要があることを意味すると思います/project/new/:id。Apacheでmod_rewriteを使用して、ユーザーに表示されるようなURLをZend用に/project/new-(\d+)書き換えることができます。/project/new/$1

于 2013-03-07T12:36:26.430 に答える