-2

モデル (.php) ファイルのクラス宣言行で、別のクラスから拡張しようとしていますAppModelModelModelOrder、などを含むいくつかのモデルがあるとしましょうModelLastShipment。はい、「モデル」は一般化のために作られた名前です。

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')拡張機能が機能するのはなぜですか?ModelOrderModelLastShipment

これを解決するためにさらに情報が必要な場合はお知らせください。この種のエラーに関する多くの記事や投稿がありますが、なぜこのエラーが発生するのか、別のエラーでは発生しないのかはまだわかりません.

4

1 に答える 1

1

モデルを含むいくつかのモデルがあるとしましょう

「モデル」という名前のクラスを作成することはできません

モデルはコアクラスです。Model という名前のクラスを作成すると、ロードされない (クラスModelが既に存在するため) か、致命的な動作が発生する可能性があります (おそらく「ランダムに」)。

問題のクラス構造は次のとおりです。

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

それはうまくいきません。クラス名は一意である必要Modelがあり、コア クラスです。

宣言の前に include_once('model.php') を含めると、この問題が解決します

これらのモデル クラス名は構成されていますか? 上で述べたように、 という名前のクラスでは不可能Modelです。

中間クラス モデルは自動的に読み込まれません

これらは Cake 1.3 で自動的にロードされる唯一のモデルクラスです:

  • モデル
  • アプリモデル
  • AppModel (該当する場合)

モデルのクラス階層がより多くの中間クラスがある場合、明示的にロードする必要があります:

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

class NotNamedModel extends SomethingElse {
于 2013-07-09T08:11:22.513 に答える