【问题标题】:Zend ControllerZend 控制器
【发布时间】:2010-09-01 09:25:28
【问题描述】:

我创建了一个控制器,其中默认索引操作用于显示登录表单,然后对用户进行身份验证。但是我最终不得不在控制器中添加功能,我觉得这会使控制器变得混乱。

例如我有这样的功能:

 protected function _process($values)
    {
        // Get our authentication adapter and check credentials
        $adapter = $this->_getAuthAdapter();
        $adapter->setIdentity($values['username']); 
        $adapter->setCredential($values['password']);

        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($adapter);
        if ($result->isValid()) {
            $user = $adapter->getResultRowObject();
            $auth->getStorage()->write($user);
            return true;
        }
        return false;
    }

   protected function _getAuthAdapter() {

        $dbAdapter = Zend_Db_Table::getDefaultAdapter();
        $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

        $authAdapter->setTableName('users')
            ->setIdentityColumn('username')
            ->setCredentialColumn('password')
            ->setCredentialTreatment('SHA1(CONCAT(?,salt))');

                return $authAdapter;
    }

你会建议做什么,也许创建另一个名为 custom_classes 的目录并以这种方式将文件包含到我的控制器中?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    根据您的示例,我会将其放入某种以 ACL 为中心的 Zend_Controller_Plugin 类中,并在您的引导程序中注册该类以确保它始终运行。

    此外,根据您的操作,逻辑可能会进入您的模型之一。

    模型应该表示构成某种实体的信息集合,模型类还应该负责读取、更新、删除和添加新模型。

    例如,用户模型可以表示数据库表中的用户。它可能包含updateFailedLogins()updateLogins() 等函数以及与特定用户模型的登录过程相关的特定函数。

    【讨论】:

      【解决方案2】:

      如果您添加的方法对于控制器处理它从用户界面接收的输入是必需的,那么将它们放在那里就可以了。如果这是一个不同的问题,请确定它是哪个责任并在那里添加方法。

      如果您发现方法中的逻辑在许多控制器中都很有用,请考虑将逻辑设置为 Zend_Controller_Action_Helper。如果您发现它必须在每个请求上运行但与控制器操作没有直接关系,请将其设置为 Zend_Controller_Plugin

      如果对用户进行身份验证,您可能需要创建一个Zend_Controller_Plugin,在调用实际的控制器操作之前对用户进行身份验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 2012-03-08
        • 2013-09-27
        相关资源
        最近更新 更多