Лучший способ передачи переменных из контроллера для просмотра в Symfony - PullRequest
0 голосов
/ 27 января 2011

Эй. У меня есть форма входа с сообщением в качестве метода. Действие переходит к 'auth / login' и проверяет базу данных, если пользователь существует. Если пользователь существует, я звоню $this->getUser->setAuthenticated(true);. После этого я хочу перенаправить на страницу приветствия в случае успеха.

Если вход не удался, я бы хотел сообщить об этом пользователю, конечно. Но настройки переменных в контроллере только в случае сбоя входа в систему и проверки в представлении, если каждая из этих переменных установлена, много работы?

Это означает, что мне нужно проверить почти все переменные, которые я хочу использовать в наборе представлений из контроллера. Если так получится, что он не задан, и я просто продолжу его выводить, я получаю сообщение об ошибке от symfony, и на этапе stage-mode-ish ничего не отображается, кроме 500 internal server error .

Спасибо

EDIT:

Это мое текущее, новое и лучшее решение. Все еще ищу обратную связь.

в / templates / loginSuccess

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

А в моем контроллере:

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

Ответы [ 3 ]

1 голос
/ 27 января 2011

Посмотрите, как это делает sfDoctrineGuardPlugin (стандарт де-факто для аутентификации): они создали sfGuardValidatorUser и используют его в качестве средства проверки почты в форме входа .

Преимущество этого метода: форма заботится о проверке имени пользователя / пароля, вам не нужно вводить этот код в свои действия. Это упрощает это до простого $form->isValid() { $this->redirect("@homepage"); }.

0 голосов
/ 27 января 2011
  1. Использование forward()
  2. Поместить всю логику, необходимую для заполнения представления, в отдельный метод контроллера и вызвать его в обоих местах.
  3. Использовать решение cgratigny - putФорма входа и обработки кода в одно действие, и перенаправить на страницу приветствия, если isMethod('post') && $login_success
0 голосов
/ 27 января 2011

Похоже, что вы можете использовать форму 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'; }
...