20

我目前正在使用 Windows 进行开发,WampServer并且Composer正在使用(使用OpenSSL),Propel 安装没有问题,一切似乎都运行良好。但是,我的项目现在需要使用Equal Nest Behaviourfound here

我认为这将允许我使用推进行为。在我的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

文档说:

然后,如果您在应用程序中不使用 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

我不确定这是否与自动加载不起作用或命名空间有关(我的架构有一个命名空间,但在删除它时我也会遇到同样的错误)。

我的composer.json文件如下所示:

{
    "require": {
        "craftyshadow/propel-equalnest-behavior": "dev-master"
    }
}

注意:我确实在那里有 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(
);
4

1 回答 1

2

这是一个自动加载问题。

请检查您是否有

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';
于 2013-08-01T19:41:53.020 回答