我有一個多語言網站,但是當我不使用setFlash
做重定向時,它會從url中刪除語言。例如:如果contactform沒有驗證,它只是在沒有redirect
的情況下執行setFlash
,這樣用戶輸入的數據就不會丟失。但它會刷新頁面並從我的網址中刪除語言部分。當我在我的setFlash
之後執行redirect
時,不會發生這種情況,因爲我將language
參數設置爲redirect
。工作流程:CakePHP setflash頁面刷新不會保留url中的語言
我開始在頁面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';
我有點懷疑''setFlash()'發出重定向,很確定請求只是直接轉到爲表單設置的URL,並且你看到了你正在看到的內容,因爲有_no_重定向。這就是說,請顯示您的表單代碼和生成的HTML輸出。在旁註中,最好使用持久參數,而不是手動傳遞語言。 PS。請始終提及您的確切CakePHP版本並相應地標記您的問題。 – ndm 2014-09-11 11:30:45
我甚至都沒有想過!這確實是它不工作的原因。但是,我怎樣才能用語言設置我的表單的動作?我嘗試'echo $ this-> Form-> create('Form',array('role'=>'form','url'=> array('controller'=>'forms','action'=>''聯繫','language'=> $ this-> Session-> read('Config.langugage'))));',但那不行。你使用持久參數意味着什麼? – Femke 2014-09-11 13:18:56
「_Doesn't work_」不是一個適當的問題描述,它適用於我。關於持久參數,請參閱'persist'選項:** http://book.cakephp.org/2.0/en/development/routing.html#router-api**,另外:** http://stackoverflow.com /查詢q =%5Bcakephp%5D +堅持**。 – ndm 2014-09-11 19:15:56