【问题标题】:Getting user friendly messages back to the View将用户友好的消息返回到视图
【发布时间】:2013-03-24 10:13:03
【问题描述】:

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

  1. 提交登录表单。

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

  3. 初始化正确的Controller

  4. RecognitionService 启动,login() 方法运行。

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

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

这一切都很好,除非输入的用户名包含无效字符,然后以一种整洁的方式将错误消息从我的域对象返回到View

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

谢谢。

【问题讨论】:

    标签: php oop model-view-controller


    【解决方案1】:

    控制器和当前视图应该共享同一个工厂来实例化服务,这样可以确保每个服务只初始化一次。

    来自控制器:

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

    【讨论】:

    • @tereško 当您需要从不同的命名空间创建对象时,您如何处理 serviceFactory?还是您总是将所有服务类放在同一个文件夹中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2012-02-17
    相关资源
    最近更新 更多