锂关系命名空间错误?
Posted
技术标签:
【中文标题】锂关系命名空间错误?【英文标题】:Lithium Relations namespaces bug? 【发布时间】:2011-12-24 05:14:27 【问题描述】:我的文件夹/命名空间层次结构:
应用程序/模型/实体 Entities.php 人 People.php (其他型号)我按照这个问题的说明进行操作:lithium fill multiple models from view,但出现错误“无法打开流: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 ' 未找到。'在第 159 行的 C:\xampp\htdocs\PhiCRM\libraries\lithium\data\model\Relationship.php 中,因此现在将另一个人添加到路径字符串。
我的问题:这是预期的行为吗?关系模型不应该使用我在 $configs 数组中提供的类路径而不是字符串与类名的连接吗?如果它是一个错误,我应该报告它,以及如何报告?
【问题讨论】:
【参考方案1】:public $belongsTo = array(
'People' => array(
'to' => '\app\models\entities\people\People',
'key' => 'person_id',
),
);
应该使用“to”而不是“class”更好地工作;-)
【讨论】:
【参考方案2】:在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);
似乎框架假定相关模型将位于同一命名空间中。我对其进行了更改,以便如果在模型中的关系声明中填写了类配置,它将使用它。
【讨论】:
以上是关于锂关系命名空间错误?的主要内容,如果未能解决你的问题,请参考以下文章