我接手了另一位开发人员的项目,对cakephp来说还不错。希望我能以适当的方式构建我的问题和方法。
我有一个页面,我想显示特定的搜索结果,我希望用特定的URL命名。此URL返回正确的结果:
http://www.advancelegaljobs.com/jobs/search/radius:Massachusetts-Boston
这是我想要使用的网址:
http://www.advancelegaljobs.com/boston-legal-jobs
我尝试过routes.php的很多变化,但似乎都没有。例如:
Router::connect('/boston-legal-jobs', array('controller' => 'jobs', 'action' => 'search', 'radius:Massachusetts-Boston'));
或
Router::connect('/boston-legal-jobs', array('controller' => 'jobs', 'action' => 'search'), array('passedArgs'=>array('radius','Massachusetts-Boston')));
任何帮助都将不胜感激。
更新:
我想我已经接近了。将路线更改为:
Router::connect('/boston-legal-jobs', array('controller' => 'jobs', 'action' => 'search', array('radius' => 'Massachusetts-Boston')));
当我记录passArgs:时,产生这个
( [0] =>排列 ( [radius] =>马萨诸塞州波士顿 )
)
当我使用产生正确结果的URL时,这就是记录的内容:
( [radius] =>马萨诸塞州波士顿 )
所以我猜我的代码是将我的数组嵌套在一个未命名的数组中?有没有想过纠正这个?
由于
答案 0 :(得分:1)
也许尝试添加:
Router::connectNamed(array('radius'));
制作自定义路线时,常见的缺陷是使用命名参数会破坏您的自定义路线。为了解决这个问题,您应该通知路由器哪些参数要命名为参数。
请参阅Named Parameters。
答案 1 :(得分:0)
我不确定这是否是解决此问题的最佳或正确方法,但经过大量试验和错误后,这是有效的方法。路线:
Router::connect('/boston-legal-jobs', array('controller' => 'jobs', 'action' => 'search', array('radius' => 'Massachusetts-Boston')));
我的操作是期待 $ this-> passedArgs ['radius'] ,但在此路由中,'radius'是数组中的第一个键。
只需添加 $ this->的另一个条件:passedArgs [0] ['radius'] 就可以了。