这是用户如何在我的应用程序中登录的摘要(直到验证数据):
-
提交登录表单
-
路由器知道用户想去哪里
-
正确的
Controller
初始化 -
RecognitionService
启动,login()
方法运行 -
在
login()
方法中,我设置了User
域对象中提供的用户名和密码。 -
我的
User
域对象将检查用户名和密码是否正确
所有这些都很好,除了当输入的用户名包含无效字符,然后从我的域对象以一种整洁的方式将错误消息返回到View
。
此刻,我让我的域对象将消息(实际上是消息的数组键)返回到RecognitionService
,然后保留消息数组键,然后在View
中,我从RecognitionService
检索消息数组键并使用它来显示正确的消息,但我有一种感觉有更好的方法,有什么想法吗?
谢谢。
控制器和当前视图应该共享用于实例化服务的相同工厂,以确保每个服务只初始化一次。
从控制器:public function postLogin( $request )
{
$recognition = $this->serviceFactory->create('Recognition');
$recognition->authenticate( $request->getParameter('username'),
$request->getParameter('password') );
}
从观点:public function login()
{
$recognition = $this->serviceFactory->create('Recognition');
if ( $recognition->hasAuthenticationError() )
{
header('Location: /login');
}
if ( $recognition->hasChangedState() ) //was POST, PUT or DELETE call
{
header('Location: ./');
}
}
public function render()
{
// .. make the html/json/whatever
}
像这样…这是我的2美分。老实说,如何实现这个视图完全取决于你自己。