这是用户如何登录我的应用程序(直到验证数据)的摘要:
提交登录表单。
路由器会找出用户尝试去的地方。
初始化了正确的Controller
。
启动RecognitionService
并运行login()
方法。
在login()
方法中,我在User
域对象中设置了提供的用户名和密码。
我的User
域对象将检查用户名和密码是否为
通过检查其类型,长度,格式等有效。
所有这一切都很好,除非输入的用户名包含无效字符,然后将我的域对象的错误消息以干净整洁的方式返回View
。
目前我正在使用我的域对象将消息(实际上是消息的数组键)返回到RecognitionService
,然后保留到消息数组键,然后保存在View
I中从RecognitionService
检索消息数组键并使用它来显示正确的消息,但我觉得有更好的方法,任何想法吗?
感谢。
答案 0 :(得分:2)
控制器和当前视图应共享同一工厂以实例化服务,这可确保每个服务仅初始化一次。
来自控制器:
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美分。老实说,你如何实现视图完全取决于你。