Ни один из этих ответов не объясняет, как удалить метку «CSRF-токен:», которая префиксарует сообщение об ошибке нехитрым способом (например, изменение имени токена - плохая идея!).
Единственный звуковой способ удаления ярлыка - расширить возможности проверки подлинности 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')
));
}
}
@naag: Большое спасибо. Пробовал несколько вещей, но не тот, будет играть. Похоже на незначительный надзор со стороны симфонии. – Tom
Я отредактировал свой ответ, чтобы включить проверку наличия валидатора CSRF :-) – naag