2012-11-20 107 views
2

我构建了一个Zend Framework应用程序,并创建了一些控制器,这些控制器对应于数据库表并保存用于在这些表上执行CRUD操作的方法。Zend框架中的嵌套控制器

我刚刚开始研究Companies控制器,该控制器包含用于添加,编辑和删除公司的方法。为此,我们可以使用传统的controller/action URL模式:

http://example.com/companies/add 
http://example.com/companies/edit/some-company 

的问题是,每个Company我们还需要管理其ContactsMachines

http://example.com/companies/some-company/machines/add 
http://example.com/companies/another-company/contacts/edit/some-contact 

我不能让我的头围绕如何在Zend Framework中管理这个问题。我应该通过路由“嵌套”控制器,还是应该使用模块?任何帮助将非常感激。

回答

4

您可以轻松地编写定制路由处理这个问题。例如,这样的:

http://example.com/companies/some-company/machines/add 

将成为您的.ini文件:

routes.machine.route = "companies/:companyname/machines/:action" 
routes.machine.defaults.controller = machines 
routes.machine.defaults.action = index 

这将链接指向machines控制器,并设置companyname作为GET-VAR。

你可以很容易地改变它,以适应你喜欢的任何形式。

1

zend框架默认路由器,你的网址没有工作。 这个环节必须努力:

http://example.com/companies/add 
http://example.com/companies/edit/id/some-company 
http://example.com/companies/addmachines/id/some-company// 
http://example.com/companies/contacts/mod/edit/companyid/another-company/ 

格式:

http://yoursite.com/Module(if available)/Controller/Action/param1/val1/param2/val2/?param3=val3 
+0

你描述它的方式,你不创建'contacts'或''机器'控制器?我想在URL中维护某种层次结构,所以形式为'http:// example.com/companies/id/some-company/machines/add'或'http://example.com/companies/id/some-company/machines/edit/id/some-machine'是需要的。这可能吗? –