路由不工作
问题描述:
我有以下两种途径在我的应用程序:路由不工作
Router::connect('/posts/:id',
array('controller' => 'posts', 'action' => 'view'),
array('id' => '[A-Za-z0-9\._-]+', 'pass' => array('id')));
Router::connect('/posts/:slug-:id',
array('controller' => 'posts', 'action' => 'view'),
array(
'id' => '[A-Za-z0-9\._-]+',
'slug' => '[A-Za-z0-9\._-]+',
'pass' => array('id', 'slug')
));
和示例网址是:
/posts/This_is_the_first_post-1
但是它会显示一个404,但如果我将id前的网址-
更改为/
,它将起作用:/任何想法是什么问题?是正则表达式造成的?
这里是我的观点方法:
function view ($id = null, $slug = null)
{
$post = $this->Post->find('first',array('contain'=>array('User'=>'Profile'),'conditions'=>array('Post.id'=>$id)));
if (!$post)
{
throw new NotFoundException('404');
}
else if($post['Post']['status'] == '0') // 0=draft 1=closed 2=open
{
if($post['Post']['user_id'] == $this->Auth->user('id'))
{
$this->Session->setFlash('Your post has NOT been published yet');
}
else
{
throw new NotFoundException('404');
}
}
if (Inflector::slug($post['Post']['title']) != $slug || $slug = null)
{
$this->redirect(array('id'=>$post['Post']['id'],'slug'=>Inflector::slug($post['Post']['title'])));
}
$this->set(compact('post'));
}
答
它看起来由正则表达式引起的。在第一条路线中,您允许-
,因此它可能无法区分第二条路线,其中:id
应该遵循-
。
Router::connect('/posts/:id',
array('controller' => 'posts', 'action' => 'view'),
array('id' => '[A-Za-z0-9\._]+', 'pass' => array('id')));
//---Removed hyphen-----^^^^^^
Router::connect('/posts/:slug-:id',
array('controller' => 'posts', 'action' => 'view'),
array(
'id' => '[A-Za-z0-9\._]+',
//---Removed hyphen-----^^^^^^
'slug' => '[A-Za-z0-9\._]+',
//---Removed hyphen-----^^^^^^
'pass' => array('id', 'slug')
));
干杯为:) – Cameron 2012-02-29 21:38:18
我实际上试着问这个问题之前删除连字符自己,但它仍然打破了:/绝拆错了人或事物。再次欢呼。 – Cameron 2012-02-29 21:42:59