鉴于该模型是“应用程序运行的数据的特定于域的表示”。 [Wikipedia: MVC],服务,表单,插件类等不被视为模型的一部分,因此它们位于/application
下的自己的目录中。默认资源自动加载器会为我们设置此项,因此MyApp_Form_Login
会自动找到/application/form/Login.php
。
对于我的应用程序,我需要编写自定义身份验证适配器。其中的逻辑将是特定于应用程序的,因此它不是可重用的库代码,因此它不属于/library/MyApp
。它不是服务类,因此它不属于/application/service
,也不属于表单等。所以,惯用这个类应该存储在哪里?
答案 0 :(得分:2)
只需创建一个特定于应用程序的库。通常这样的班级不是个人图书馆的唯一候选人。
答案 1 :(得分:2)
您可以在application
文件夹中创建其他文件夹,并在Bootstrap
课程中添加资源路径。
例如,假设您对“应用程序”的所有特定于应用程序的类(模型,表单,插件等)使用命名空间,则可以使用以下命令:
protected function _initAutoloader()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH,
'namespace' => 'Application',
));
$autoloader->addResourceType('MyType', APPLICATION_PATH . '/mytypes');
return $autoloader;
}
然后您可以在文件Application_MyType_Foo
中存储名为application/mytypes/Foo.php
的类。
如果您查看Zend_Application_Module_Autoloader
的代码,那么它们实际上是为了让您自动加载模型,表单,插件等。
答案 2 :(得分:0)
一种方法是创建一个服务类(我们知道这些服务的位置:/application/service
),它封装了特定于应用程序的身份验证逻辑。它可以使用库类来进行基本身份验证,例如检查数据库的用户名和密码,但在将结果返回给客户端代码之前,还应用特定于应用程序的逻辑。
示例:
class MyApp_Service_User {
public function authenticate($sUsername, $sPassword) {
$oAuth = Zend_Auth::getInstance();
$oAuthAdapter = new Zend_Auth_Adapter_DbTable(...);
$oResult = $oAuth->authenticate($oAuthAdapter);
/* Application-specific logic */
return $oAppSpecificAuthResult;
}
...
}
答案 3 :(得分:0)
我最近回答了一个类似的问题,请看下面的链接,看看这是否有帮助! ;)
Zend autloading different namespaces from the same directory?