我有class MY_Controller extends CI_Controller大型配置文件部分的常用逻辑,所以I'va尝试class Profile extends MY_Controller使用配置文件部分的通用逻辑创建,所有与此部分相关的类都应该扩展此Profile类,正如我所理解的那样,但是当我尝试创建时class Index extends Profile我收到错误:
Fatal error: Class 'Profile' not found
Run Code Online (Sandbox Code Playgroud)
CodeIgniter试图找到index.php我正在运行的这个类.
我的错误在哪里?或者也许有更好的方法来标记共同的逻辑?
这个问题在清除我对此事的困惑方面做得非常好,但我很难找到关于服务层的确切限制应该是什么的可靠来源.
对于这个例子,假设我们正在处理书籍,我们希望通过作者获得书籍.本BookDataMapper可以有一个通用的get()接受条件(S),如书的唯一标识符,作者姓名等这个实现是相当微不足道的(逻辑)方法,但如果我们希望有需要更复杂的查询多个条件是什么?
让我们说我们希望得到某位作者在特定出版商下撰写的所有书籍.我们可以扩展BookDataMapper->get()方法来解析多个条件,或者我们可以编写一个新的方法,如BookDataMapper->getByAuthorAndPublisher().
是否最好让服务层直接调用这些[更具体]的方法,或者在调用BookDataMapper->get()多个条件传递的更通用方法之前解析条件?在后一种情况下,服务层将执行更多逻辑"繁重的工作",使数据映射器相当简单.前一个选项会将服务层几乎完全缩减为中间人,将条件逻辑留给数据映射器等方法BookDataMapper->getByAuthorAndPublisher().
让服务层解析条件的一个明显问题是某些域逻辑泄漏出数据映射器.(这在此处的链接问题中进行了解释.但是,如果服务层要处理条件,则逻辑不会使其脱离模型层;控制器将无论如何调用$book_service->getByAuthorAndPublisher().
如何设置CI2以允许扩展多个模型?
我只能扩展一个名为MY_Model的模型(放入/ application/core)(区分大小写).
选择我正在做的扩展模型; 在模型中..
require_once APPPATH.'core/MY_Another_model.php';
class Test_model extends MY_Another_model {
...
}
Run Code Online (Sandbox Code Playgroud)
我无法在核心系统代码中找到它所声明的位置,只允许将被扩展的模型称为MY_Model.
感谢您的帮助.