【问题标题】:CakePHP 1.3: extending class unable to find its parent model PHP fileCakePHP 1.3:扩展类无法找到其父模型 PHP 文件
【发布时间】:2013-07-08 23:25:34
【问题描述】:

在模型 (.php) 文件的类声明行中,我试图扩展一个不同的类然后 AppModel。假设我有一些模型,包括ModelModelOrderModelLastShipment 等。是的,“模型”是为了概括起见而编造的名称。

Model 不使用表,也没有任何表关联。它扩展了AppModel。它有一些我希望ModelOrderModelLastShipment(以及其他Model... 类)继承的基本功能。问题是虽然ModelOrder 可以扩展(即class ModelOrder extends Model {...}),但由于缺少文件错误,我无法对以下内容执行相同操作。

model_last_shipment.php:

class ModelLastShipment extends Model {...}

这会返回错误,

Fatal error: Class 'Model' not found in C:\xampp\htdocs\my_app\app\models\model_last_shipment.php on line 3

在声明之前包含include_once('model.php') 解决了这个问题,但是为什么扩展对ModelOrder 有效而没有明确的inlcusion 而对ModelLastShipment 无效?

如果需要更多信息来解决此问题,请告诉我。有很多关于这种错误的文章和帖子,但我还没有弄清楚为什么我会收到一个错误而不是另一个错误。

【问题讨论】:

  • 您应该始终扩展 AppModel,并确保已加载父类 - 在 1.3 中,我猜您需要 App::import()。
  • 刚刚更新了帖子。 Model 扩展了 AppModel(当然!)。
  • 不,反过来 :) 然后:class ModelLastShipment extends AppModel
  • 但是我想扩展Model 所以ModelLastShipment 继承了Model 的一些属性。这些属性不适用于AppModel

标签: cakephp cakephp-1.3


【解决方案1】:

假设我有一些模型,包括模型

无法创建名为“Model”的类

Model 是一个核心类。如果您创建一个名为 Model 的类,它要么没有被加载(因为类 Model 已经存在)要么导致致命的行为 - 可能是“随机的”。

问题中的类结构是:

Overloadable (Cake)
    Model (Cake)
        AppModel (App)
            Model (App) <- problem

那是行不通的。类名必须是唯一的,Model 是一个核心类。

在声明之前包含 include_once('model.php') 解决了这个问题

这些模型类名称是组成的吗?如上所述,使用名为 Model 的类是不可能的。

中间类模型不会自动加载

这些是在 Cake 1.3 中自动加载的唯一模型类:

  • 型号
  • AppModel
  • AppModel(适当时)

如果您的模型的类层次结构中有更多的中间类 - 它们需要显式加载:

<?php
App::import('Model', 'SomethingElse');

class NotNamedModel extends SomethingElse {

【讨论】:

  • 我的问题是-1,因为很明显类名是由组成的,所以这个问题对任何未来的读者都没有用。请始终使用真实姓名。当问题更新时,我会更新我的答案。
  • 我的想法正好相反,使用通用名称进行概括会更有用,但我承认正如您所描述的那样,“模型”是一个糟糕的选择。我已更新以添加到我的帖子中,但不会更改内容,因为我已经参考了 cmets。
  • 现在,我的问题是我不明白为什么一个类可以在没有App::import() 的情况下扩展“模型”而另一个类不能。根据你的回答吧,后者其实是正常的。我会看看所有功能是否正常工作。
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
相关资源
最近更新 更多