2014-09-11 94 views
0

我有一個多語言網站,但是當我不使用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'; 
+1

我有點懷疑''setFlash()'發出重定向,很確定請求只是直接轉到爲表單設置的URL,並且你看到了你正在看到的內容,因爲有_no_重定向。這就是說,請顯示您的表單代碼和生成的HTML輸出。在旁註中,最好使用持久參數,而不是手動傳遞語言。 PS。請始終提及您的確切CakePHP版本並相應地標記您的問題。 – ndm 2014-09-11 11:30:45

+0

我甚至都沒有想過!這確實是它不工作的原因。但是,我怎樣才能用語言設置我的表單的動作?我嘗試'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

+0

「_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

回答

0

我一直在尋找在我的問題錯了方向。由於ndm在他對我的問題的評論中指出,它與我的表單的行爲有關,它沒有語言部分。所以感謝ndm爲我指出了正確的方向!