我正在使用 cakephp 2
我很难在 routes.php 中自定义我的路线。
所以就我而言,我有一个 Post 模型和一个 PostsController。索引操作列出了我的所有帖子,每个列出的帖子都是一个可点击的链接,可以转到我的显示操作。所以我的帖子>索引的“标准”路线是:“localhost/cakesite/posts/index”,对于翻译版本,它就像:“localhost/cakesite/eng/posts/index”。对应的修改路由为:“localhost/cakesite/news”和“localhost/cakesite/eng/news”。
现在对于 show 动作,它略有不同,因为我需要传递一些参数,例如 slug 和 id,所以它看起来像这样,无需修改其路由:“localhost/cake/posts/show/75/language:eng”。但我想得到类似:“localhost/cakesite/news/slug-id”和翻译版本:“localhost/cakesite/eng/news/slug-id”。这些都是我无法完成的路线。这个:“localhost/cakesite/news/slug-id”正在工作,但是当我将指针放在链接上时,我得到:“localhost/cake/posts/show/75”但是一旦我点击它,它就会重定向我出现在我的浏览器中的正确网址,例如:“localhost/cake/news/slug-75”。奇怪的是,在鼠标悬停时,重定向的 url 有不同的结果。
所以这是我到目前为止的路线:
// News index
Router::connect('/news',
array('controller' => 'posts', 'action' => 'index')
);
Router::connect('/:language/news',
array('controller' => 'posts', 'action' => 'index'),
array('language' => '[a-z]{3}','persist'=>array('language'))
);
// News show
Router::connect('/news/:slug-:id',
array('controller' => 'posts', 'action' => 'show'),
array('pass' => array('id', 'slug'),
'id' => '[0-9]+',
'slug' => '[a-z0-9\-]+')
);
Router::connect('/:language/news/:slug-:id',
array('controller' => 'posts', 'action' => 'show'),
array('pass' => array('slug','id'), 'language' => '[a-z]{3}', 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+')
);
应用助手
class AppHelper extends Helper {
public function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language'])) {
$url['language'] = $this->params['language'];
}
return parent::url($url, $full);
}
}
从索引到显示的实际链接
$lang=Configure::read('Config.language');
echo $this->Html->link(
$this->Html->tag('h1', $v['name_'.$lang], array('class' => 'news_titre')).' '.
$this->Html->tag('span', $v['created'], array('class' => 'news_date')).' '.
$this->Html->tag('div', '', array('class' => 'clear_float')).' '.
$this->Html->tag('span', $this->Html->image("news/".$v['photo'], array( "alt" => $v['name_'.$lang])), array('class' => 'news_thumb')).' '.
$this->Html->tag('p', $this->Text->truncate(strip_tags($v['content_'.$lang]), 297, array('ellipsis' => '...', 'exact' => false)), array('class' => 'news_contenu')),
array('action' => 'show',$v['id']), array('class' => 'news_box', 'escape' => false));
我已经放置了 aboce 代码以显示与什么相关的内容,但如果您需要任何其他内容,请告诉我,我将编辑该帖子。那么,有人知道我做错了什么吗?
在此先感谢您的帮助!