0

我的文件夹/命名空间层次结构:

  • 应用程序/模型/实体
    • 实体.php
    • 人们
      • 人.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',
    ),
);

现在错误消失了(将第二行从'People'更改为'people\People'),但现在我收到错误:'Related model class'app\models\entities\people\people\People' not found 。在第 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',
    ),
);

应该使用“to”而不是“class”更好地工作;-)

于 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 回答