我有一个多语言网站,但是当我不使用setFlash
进行重定向时,它会从网址中删除该语言。示例:如果联系表单未验证,则只执行setFlash
而不使用redirect
,以便用户输入数据不会丢失。但它会刷新页面并从我的网址中删除语言部分。当我在redirect
后执行setFlash
时,这不会发生,因为我将language
param与redirect
一起提供。工作流程:
我从页面 website.com/eng/contact 开始(请注意语言部分)。我填写联系表格并填写所有必填项。它会将我重定向到 website.com/eng/contact/send 。这很好,我想要的。但是,当我没有提供有效的电子邮件地址时,它会显示错误(很棒),但网址已更改为 website.com/forms/contact (请注意缺少的语言部分,以及它不使用我的路线)。我究竟做错了什么?我的代码:
Formscontroller.php
public function contact() {
if ($this->request->is('post')) {
$this->Form->set($this->request->data);
if ($this->Form->validates()) {
if($this->Form->save($this->request->data)){
$this->redirect(array('controller' => 'forms', 'action' => 'contact_success', 'language' => $this->Session->read('Config.language')));
} else {
$this->Session->setFlash(__('Er ging iets mis met het versturen van uw contactformulier, probeer het opnieuw.'), 'flash_error');
}
} else {
$this->Session->setFlash(__('Niet alle verplichte velden zijn ingevuld.'), 'flash_error');
}
}
}
routes.php文件
Router::connect('/:language/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/:language/contact', array('controller' => 'forms', 'action' => 'contact'), array('language' => 'ned|eng'));
Router::connect('/:language/contact/verzonden', array('controller' => 'forms', 'action' => 'contact_success'), array('language' => 'ned'));
Router::connect('/:language/contact/send', array('controller' => 'forms', 'action' => 'contact_success'), array('language' => 'eng'));
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/:language', array('controller' => 'pages', 'action' => 'display', 'home'), array('language' => 'eng|ned'));
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{3}'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';