我目前正在Windows上使用WampServer
进行开发,并且Composer
可以正常工作(使用OpenSSL
),并且可以安装Propel而不会出现问题,并且一切正常。但是,我的项目现在需要利用here找到的Equal Nest Behaviour
。
我以为这将使我能够使用 push 行为。在我的schema.xml
中,我有以下代码段:
<table name="friend">
<behavior name="equal_nest">
<parameter name="parent_table" value="user" />
</behavior>
</table>
但是当我运行
propel-gen sql
时,出现错误:[phingcall] Unknown behavior "equal_nest"; make sure you configured the propel.be
havior.equal_nest.class setting in your build.properties
该文件说:
让我假设我不必放入build.properties文件。但是,放入它会给我以下错误:
PHP Fatal error: Class 'EqualNestParentBehavior' not found in C:\home\movesleag
ue.com\vendor\craftyshadow\propel-equalnest-behavior\src\EqualNestBehavior.php o
n line 74
我不确定这是否与自动加载不起作用或 namespace 有关(我的架构具有 namespace ,但删除它时也会出现同样的错误)。
我的
composer.json
文件如下所示:{
"require": {
"craftyshadow/propel-equalnest-behavior": "dev-master"
}
}
注意:我确实有Propel,但是由于行为平等本身就需要Propel,所以我只是让它做它的工作。
那么,在Composer中使用Propel行为的正确方法是什么,如果我做对了,为什么会看到上面的错误?
更新
我将此行添加到
EqualNestBehaviour.php
的顶部:include __DIR__ . DIRECTORY_SEPARATOR . 'EqualNestParentBehavior.php';
而且SQL似乎正确生成,没有错误。但是,更改该文件对我来说似乎并不聪明!自动加载可能有问题吗?您能想到我可以做些测试吗?
我可以确认在我的实际
Equal Nest Behaviour
代码中使用Propel
可以正常工作,并使用addFriends()
这样的功能-上面的更改仍然存在。在我的
autoload_namespaces.php
文件中,我具有以下内容:<?php
// autoload_namespaces.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);
最佳答案
这是一个自动加载问题。
请检查您是否有
propel.behavior.equal_nest.class = vendor.craftyshadow.propel-equalnest-behavior.src.EqualNestBehavior
在您的build.properties中(用于Propel)。
请检查在应用程序的引导过程中是否包含了composer生成的自动加载器文件。 Composer生成一个“vendor / autoload.php”文件。如果包含它,则可以免费进行自动加载。 Composer安装的所有内容都会自动找到。
require 'vendor/autoload.php';