我正在使用cakephp 2
我很难在routes.php中自定义我的路线。
所以在我的情况下,我有一个Post模型和一个PostsController。索引操作列出了我的所有帖子,每个列出的帖子都是一个可点击的链接,可以转到我的show动作。所以我的帖子>索引的“标准”路线是:“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:工程”。但我希望得到类似的东西:“localhost / cakesite / news / slug-id”和翻译版本:“localhost / cakesite / eng / news / slug-id”。这些都是我无法完成的路线。这个:“localhost / cakesite / news / slug-id”正在工作,但是当我指向链接时,我得到:“localhost / cake / posts / show / 75”但是一旦我点击它,它就会重定向我在我的浏览器中显示的正确URL:“localhost / cake / news / slug-75”。奇怪的是,在鼠标悬停时我对重定向的网址有不同的结果。此外,当我的语言环境设置在语言上时,鼠标悬停:localhost / cake / posts / show / 75 / language:eng“和点击后:”localhost / cake / news / slug-75“,语言在重定向时消失网址。
所以这是我到目前为止的路线:
// 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]+')
);
AppHelper
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代码来显示与什么有关,但如果你需要什么,请告诉我,我会编辑帖子。那么,有没有人知道我做错了什么?
提前感谢您的帮助!
答案 0 :(得分:0)
我认为你的路线大多是正确的。困扰你的是网址的显示。
根据您的最后一段代码,您对网址进行套接的方式是使用类似
的数组$this->Html->tag( /* etc */,
/*here's the redirection*/ array('action'=>'show', $id), /*etc*/)
尝试将该数组更改为此
$this->Html->tag( /* etc */,
/*here's the redirection*/ array('action'=>'show',
'id' => $id,
'slug' => $slug,
'language' => $language), /*etc*/)