2011-01-27 76 views
0

嘿。 我有一個登錄表單作爲方法的職位。該操作轉到「auth/login」,並會檢查數據庫是否存在用戶。如果用戶存在,我打電話給$this->getUser->setAuthenticated(true);。在此之後,如果成功,我想重定向到歡迎頁面。從控制器傳遞變量到symfony中查看的更好方法

如果登錄失敗,我想在當然的視圖中告訴用戶。但是,只有在登錄失敗時纔在控制器中設置變量,並在視圖中檢查是否設置了每個變量,這是否有很多工作要做?

這意味着我必須檢查幾乎所有我想在控制器視圖集中使用的變量。如果應該發生它沒有設置,並且我繼續並回顯它,我從symfony中得到一個錯誤,並且生產stage-mode-ish不顯示任何內容,只有500 internal server error

感謝

編輯:

這是我目前的,新的,更好的解決方案。仍在尋找反饋。

在/模板/ loginSuccess

if ($sf_params->has('bad_login')) { echo "Wrong username or password"; }

而且在我的控制器:

 
$this->redirect('auth/login?bad_login='); 

回答

1

看看sfDoctrineGuardPlugin(用於身份驗證的事實標準)是如何做的:他們創造sfGuardValidatorUser並把它作爲一個後驗證在signin form

此方法的優點:表單處理用戶名/密碼驗證,您不需要將該代碼放入您的操作中。它簡化了簡單的$form->isValid() { $this->redirect("@homepage"); }

0

好像你可以使用的symfony的形式採取驗證照顧。由於形式顯示內置的錯誤,你可以把這個到表單驗證,然後你的控制器看起來像:

$form = new LoginForm; 
if ($request->isMethod('post')) 
{ 
    if ($form->isValid()) 
    { 
    $this->redirect('account'); 
    } 
    else 
    { 
    // this would show the form, and since you put the login in the form validation it will show errors. You could have the username show the error 
    } 
} 

要做到你儘管做什麼,我建議這一點。這樣你就不會訪問視圖中的任何參數。

控制器:

$this->bad_login = $this->getParameter('bad_login',false); 

查看:

if ($bad_login) { echo 'bad login'; } 
0
  1. 使用forward()
  2. 把所有的視圖人口到控制器的分離方法所需的邏輯,並把它在這兩個地方。
  3. 使用cgratigny的解決方案 - 把登錄表單和處理代碼在一個單一的行動,並重定向到歡迎頁面,如果isMethod('post') && $login_success
相關問題