2016-11-29 21 views
0

我有一個頁面,我已經保持在用戶可以切換語言的下拉菜單。我使用的是主題,所以我在login.ctp頁面上保留了這個下拉列表,並使用Jquery向控制器的方法發佈表單值。我在login.ctp中有兩個表單元素,我不知道,但我的下拉表單元素沒有達到特定的控制器,而是重定向到登錄控制器。頁面重定向問題 - CakePHP3使用Jquery

login.ctp 
<form id="locale_form" method="post" action="changeLanguage"> 
    <div id="language" class="language" align="right"> 
    Please Select Language 
    <select id="languageselect" name="languageselect"> 
     <option name="select" value="lang">Select A Language</option> 
     <option name="en_EN" value="en_EN">English</option> 
     <option name="de_DE" value="de_DE">German</option> 
    </select> 
</div> 
    </form> 
<div id="login-page"> 
     <div class="container"> 

       <!-- <form class="form-login"> --> 
       <?= $this->Flash->render('auth') ?> 
      <?= $this->Form->create('',['class'=> 'form-login','id'=>'login_form']) ?> 
-----------------Login Form Code---------------- 

使用jquery onchange我正在切換語言。

<script type="text/javascript"> 

    $("select").change(function(){  
     $("#locale_form").submit(); 
    }); 

    </script> 

我Userscontroller withing這個方法:

use Cake\I18n\I18n; 


class UsersController extends AppController 
{ 
public function changeLanguage() 
    { 
     /*I18n::locale('de_DE'); 
     echo "reached here";*/ 
     print_r($this->request->data());die(); 
     if ($this->request->is('post')) 
     { 

      $lang = $this->request->data('languageselect'); 
      $this->request->session()->write('locale', $lang); 
      I18n::locale($lang); 
      return $this->redirect(['action' => 'login']); 
     } 

    } 

我不知道爲什麼,但我使用id = 「locale_form」 表單元素沒有達到它的動作元素。我正在使用CakePHP3,我不知道我在哪裏搞砸了。

+0

您是否允許對未登錄用戶使用'changeLanguage'功能?我的猜測(你可以通過Firefox,Chrome等內置的網絡活動監視器來確認),它會調用changeLanguage,但由於訪問限制,它會重定向到登錄頁面。 –

+0

是的,你是對的!我沒有訪問未登錄的用戶。所以它強制重定向它首先登錄。抱歉!如果你已經給出答案,我會贊成你。但無論謝謝! –

回答

1

添加這種方法changeLanguage允許像下面。

$this->Auth->allow('changeLanguage');