2013-07-22 32 views
1

當我配置的Silex SecurityServiceProvider{_locale}參數去上班,login.check_path返回LogicException如下:在SecurityServiceProvider使用Silex的防火牆{_locale}

LogicException:控制器必須返回響應(空給出) 。你忘了在控制器的某個地方添加一個return語句嗎?

以下是我的設置:

​​

login_path和防火牆的處理看起來做工精細,但無法完成登錄過程。 它有什麼問題?

我還問你什麼是投放到樹枝{{ path() }}方法,因爲我無法弄清楚由於{_locale}存在login_pathcheck_pathlogout_path正確的路徑名。

謝謝。

+0

您是否找到解決方案? – Trix

回答

1

今天有同樣的問題:),發現此解決方案:

添加default_target_pathalways_use_default_target_pathsecurity.firewalls形式配置。

'form' => array(
    'login_path' => '/', 
    'check_path' => 'login_check', 
    'default_target_path' => '/' . $app['locale'], 
    'always_use_default_target_path' => true 
), 

編輯

因此,使用$app['locale']不能很好地工作。

這是更好的使用$app['session']->get('locale'),並在before中間件

$app->before(function (Request $request) use ($app) { 
    $app['session']->set('locale', $app['locale']); 
    .... 
}); 

也許有人有超載事件偵聽器較好地解決區域設置爲會話。但我認爲這是一個快速解決方案。

+0

我知道'$ app ['session'] - > get('locale')'解決方法,但它似乎並沒有解決實際處理問題(請參閱_check_path_)基於URL的本地化登錄表單,到URI原則。 – Jerus