0

这是用户如何登录我的应用程序的摘要(直到验证数据):

  1. 提交登录表单。

  2. 路由器找出用户试图去的地方。

  3. 正确Controller初始化。

  4. RecognitionService启动并运行该方法login()

  5. 在该login()方法中,我在我的User域对象中设置了提供的用户名和密码。

  6. 我的User域对象将通过检查用户名和密码的类型、长度、格式等来检查用户名和密码是否有效。

所有这一切都很好,除非输入的用户名包含无效字符,然后以View整洁的方式从我的域对象中获取错误消息。

目前,我让我的域对象将消息(实际上是消息的数组键)返回给RecognitionService它,然后保留消息数组键,然后在View我从中检索消息数组键RecognitionService并使用它来显示正确的信息,但我觉得有更好的方法,有什么想法吗?

谢谢。

4

1 回答 1

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 美分。老实说,如何实现视图完全取决于您。

于 2013-03-24T10:28:03.793 回答