Php symfony2 error.message和error.messageKey之间的差异
我正在实现一个简单的自定义登录表单。我举的是两个不同的例子,一个是官方的,另一个是实质上相同但有些不同的。 看一下这两个示例的login.html.twig,其中一个区别在于第一次报告的错误消息报告Php symfony2 error.message和error.messageKey之间的差异,php,symfony,twig,Php,Symfony,Twig,我正在实现一个简单的自定义登录表单。我举的是两个不同的例子,一个是官方的,另一个是实质上相同但有些不同的。 看一下这两个示例的login.html.twig,其中一个区别在于第一次报告的错误消息报告 <div class="error">{{ error.message|trans }}</div> {{error.message | trans} 而其他报告 div class="error">{{ error.messageKey|trans(error.m
<div class="error">{{ error.message|trans }}</div>
{{error.message | trans}
而其他报告
div class="error">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
div class=“error”>{{error.messageKey | trans(error.messageData,'security')}
请回答我的问题:“error.message”和“error.messageKey”之间有什么区别?error.messageData在第二个示例中是什么意思?在第二个示例中,根据您提供的文档: 传递到模板中的错误变量是AuthenticationException的实例。它可能包含有关身份验证失败的更多信息,甚至是敏感信息,请明智地使用它 以及相关的类: 因此,发送到模板的变量
error
为,对象通过以下方式获得:
$error = $authenticationUtils->getLastAuthenticationError();
在第一个示例中,变量error
是通过以下方式获得的类常量:
$error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR);
以及相关的类:
因此,您可以注意到两个变量error
只共享相同的名称!它们不是同一类的实例
**编辑**
这是对您的评论的回答,两种方法的作用相同
1.第一种方法
因此:
$error=$authenticationUtils->getLastAuthenticationError()
接
{{error.messageKey | trans(error.messageData,'security')}
将返回:
“发生身份验证异常。”
2.第二种方法
所以
$error=$session->get(securitycontenterface::AUTHENTICATION\u错误)
接
{{error.message | trans}}
会回来的
存储在会话中的最后一个身份验证错误
在第一种情况下(error.message | trans
)error.message
只保留翻译键
第二个(error.messageKey | trans(error.messageData,'security')
)稍微复杂一些:
- 您在
错误中有消息键。消息键
- 您拥有的数据将用于在翻译后的字符串中填充占位符(某种类型的
请参阅sprintf('test:%s',messageData)
- 您拥有消息域
安全性
(将消息组织为组的可选方式)请参阅
class AuthenticationUtils
{
/**
* @param bool $clearSession
*
* @return AuthenticationException|null
*/
public function getLastAuthenticationError($clearSession = true)
{
$request = $this->getRequest();
$session = $request->getSession();
$authenticationException = null;
if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
$authenticationException = $request->attributes->get(Security::AUTHENTICATION_ERROR);
} elseif ($session !== null && $session->has(Security::AUTHENTICATION_ERROR)) {
$authenticationException = $session->get(Security::AUTHENTICATION_ERROR);
if ($clearSession) {
$session->remove(Security::AUTHENTICATION_ERROR);
}
}
return $authenticationException;
}
class AuthenticationException extends \RuntimeException implements \Serializable
{
/**
* Message key to be used by the translation component.
*
* @return string
*/
public function getMessageKey()
{
return 'An authentication exception occurred.';
}
/**
* Message data to be used by the translation component.
*
* @return array
*/
public function getMessageData()
{
return array();
}
}
interface SecurityContextInterface extends TokenStorageInterface, AuthorizationCheckerInterface
{
const AUTHENTICATION_ERROR = Security::AUTHENTICATION_ERROR;
}
final class Security
{
const AUTHENTICATION_ERROR = '_security.last_error';
}