0

私のフォルダ/名前空間の階層:

  • アプリ/モデル/エンティティ
    • Entities.php
      • People.php
      • (他のモデル)

私はこの質問の指示に従いました:リチウムはビューから複数のモデルを埋めますが、「ストリームを開くことができませんでした:C:\ xampp \ htdocs \ PhiCRM \ libraries \ lithium \ core\Libraries.phpにそのようなファイルまたはディレクトリはありません行468"、そうです...上で見たように、別のフォルダーにネストされています。これは、以下に示すconfigs配列で示されます。

私の修正:変更しました

public $belongsTo = array(
    'People' => array(
        'class' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

public $belongsTo = array(
    'people\People' => array(
        'class' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

エラーはなくなります(2行目を「People」から「people \ People」に変更)が、エラーが発生します:「関連モデルクラス」app \ models \ entity \ people \ people\People'が見つかりません。」159行目のC:\ xampp \ htdocs \ PhiCRM \ libraries \ lithium \ data \ model \ Relationship.phpにあるので、パス文字列に別の人を追加します。

私の質問:これは意図された動作ですか?リレーションシップモデルでは、クラス名との文字列連結ではなく、$ configs配列で指定したクラスパスを使用するべきではありませんか?バグの場合、報告する必要がありますか?

4

2 に答える 2

1
public $belongsTo = array(
    'People' => array(
        'to' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

'class'の代わりに'to'を使用するとうまくいくはずです;-)

于 2012-01-05T22:59:47.640 に答える
0

librarires / lithium / data / model / Relashionships.php、ln 115では、元のコードは次のとおりです。

    if (!$config['to']) {
        $assoc = preg_replace("/\\w+$/", "", $config['from']) . $name;  
        $config['to'] = Libraries::locate('models', $assoc);
    }

に変更されました

    if (!$config['to']) {
        if(!$config['class']){
            $assoc = preg_replace("/\\w+$/", "", $config['from']) . $name;  
        }
        else{
            $assoc = $config['class'];
        }
        $config['to'] = Libraries::locate('models', $assoc);
    }

フレームワークは、関連するモデルが同じ名前空間にあることを前提としているようです。モデルのリレーションシップ宣言にクラス構成が入力されている場合は、代わりにそれを使用するように変更しました。

于 2011-12-26T03:08:54.043 に答える