我目前正在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';

08-26 22:45
查看更多