私はcakephp 2を使用しています
routes.php でルートをカスタマイズするのに苦労しています。
私の場合、Post モデルと PostsController があります。index アクションはすべての投稿を一覧表示し、一覧表示された各投稿はクリック可能なリンクで、show アクションに移動します。したがって、posts>index の「標準」ルートは「localhost/cakesite/posts/index」で、翻訳版は「localhost/cakesite/eng/posts/index」のようになります。対応する変更されたルートは、「localhost/cakesite/news」および「localhost/cakesite/eng/news」です。
slug や id などのパラメーターを渡す必要があるため、show アクションの場合は少し異なります。そのため、ルートを変更しないと、"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。マウスオーバーすると、リダイレクトされた 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 コードを配置しましたが、他に何か必要な場合は、投稿を編集することをお知らせください。それで、誰かが私が間違っていることを知っていますか?
よろしくお願いします。