Ни один из этих ответов не объясняет, как удалить метку "CSRF token:", которая префиксом сообщения об ошибке небрежно (например, изменение имени токена - плохая идея!).
Единственный надежный способ удаления метки - расширение валидатора CSRF для выдачи глобальной ошибки. Пока мы делаем это, мы также можем изменить сообщение об ошибке.
class myValidatorCSRFToken extends sfValidatorCSRFToken
{
protected function configure($options = array(), $messages = array())
{
parent::configure($options, $messages);
$this->addMessage('csrf_attack', 'Your session has expired. Please return to the home page and try again.');
}
protected function doClean($value)
{
try {
return parent::doClean($value);
} catch (sfValidatorError $e) {
throw new sfValidatorErrorSchema($this, array($e));
}
}
}
Теперь давайте настроим наши формы для использования этого валидатора, переопределив sfForm::addCSRFProtection
в BaseForm
:
public function addCSRFProtection($secret = null)
{
parent::addCSRFProtection($secret);
if (isset($this->validatorSchema[self::$CSRFFieldName])) //addCSRFProtection doesn't always add a validator
{
$this->validatorSchema[self::$CSRFFieldName] = new myValidatorCSRFToken(array(
'token' => $this->validatorSchema[self::$CSRFFieldName]->getOption('token')
));
}
}