Leo*_*lis 20 php propel behavior composer-php
我目前正在Windows上开发WampServer并且已经开始Composer工作(有OpenSSL),Propel安装没有问题,一切似乎都运行正常.但是,我的项目现在需要使用此处Equal Nest Behaviour找到的内容.
我以为这会让我使用推进行为.在我的schema.xml我有以下片段:
<table name="friend">
<behavior name="equal_nest">
<parameter name="parent_table" value="user" />
</behavior>
</table>
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时propel-gen sql我得到了错误:
[phingcall] Unknown behavior "equal_nest"; make sure you configured the propel.be
havior.equal_nest.class setting in your build.properties
Run Code Online (Sandbox Code Playgroud)
文件说:
然后,如果您不在应用程序中使用Composer或自动加载器,请将以下配置添加到build.properties或propel.ini文件中:
让我假设我没有必要放入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
Run Code Online (Sandbox Code Playgroud)
我不确定这是否与自动加载无法工作或命名空间有关(我的架构有一个命名空间,但我也删除了同样的错误).
我的composer.json文件看起来像这样:
{
"require": {
"craftyshadow/propel-equalnest-behavior": "dev-master"
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我确实在那里有Propel,但由于同样的行为需要它本身,我只是让它做它的工作.
那么,在Composer中使用Propel行为的正确方法是什么,如果我做得对,为什么我会看到上面的错误?
更新
我在顶部添加了这一行EqualNestBehaviour.php:
include __DIR__ . DIRECTORY_SEPARATOR . 'EqualNestParentBehavior.php';
Run Code Online (Sandbox Code Playgroud)
并且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(
);
Run Code Online (Sandbox Code Playgroud)
这是一个自动加载问题。
请检查您是否有
propel.behavior.equal_nest.class = vendor.craftyshadow.propel-equalnest-behavior.src.EqualNestBehavior
Run Code Online (Sandbox Code Playgroud)
在你的 build.properties 中(对于 Propel)。
请检查应用程序的引导过程中是否包含 Composer 生成的自动加载器文件。Composer 生成一个“vendor/autoload.php”文件。如果您包含它,那么您将免费获得自动加载。Composer 安装的所有内容都会自动找到。
require 'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)