使用Composer安装Propel行为

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)

Jen*_*och 2

这是一个自动加载问题。

请检查您是否有

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)