PHP 中的 Propel 和 Composer:无关联

Propel and Composer in PHP: no connection

我在 php 项目中使用 Composer 配置 Propel 时遇到问题。

这是我的树目录的显示方式:

project/
    |--/public_html/index.php
    |--/app/
    |    |--data/
    |    |     |--propel.json
    |    |     |--schema.xml
    |    |--vendor/
    |    |--composer.json

在 /data/ 文件夹中,我将存储所有推进文件,即 generated-类/ 、 generated-conf/ 和 generated-sql/ .

为了实现这个目的,在 /data/ 文件夹中有一个终端,我按以下顺序输入命令:

$ propel sql:build
$ propel model:build
$ propel config:convert

一切顺利。

为了制作更合适的作品,在 composer.json 我添加了这个额外的功能:

"autoload": {
    "classmap": ["./data/generated-classes/"]
}

因此,几乎在理论上,将

require '../app/vendor/autoload.php';

里面index.php应该够了。不幸的是,当我尝试在此页面中使用一个推进器 类 时,returns 错误

Type: Propel\Runtime\Exception\RuntimeException

Message: No connection defined for database "my_api". Did you forget to define a connection or is it wrong written?

File: 'C:\pathToMyProject'\project\app\vendor\propel\propel\src\Propel\Runtime\ServiceContainer\StandardServiceContainer.php

Line: 279

我以为 propel 找不到存储在 /data/folder 中的 propel.json 文件。

另外,如果在 index.php 中,我只需添加

require_once  '../app/data/generated-conf/config.php';

一切顺利。

有一个技巧可以在不使用最后一个的情况下自动加载推进器require_once? (显然保持树原样)。

感谢阅读。

  • CLI 命令的顺序很重要:

    • composer installupdate 获取推进器
    • 然后是使用 propel
    • 生成模型的命令
    • 然后使用 composer dump-autoload --optimize
    • 重新扫描/重新生成自动加载文件
  • 您可以在应用程序的 bootstrap 进程中包含配置文件 - 就像您已经拥有的那样。

  • 或者您可以使用 Composers autoload 部分中的 files 指令 定义文件,该文件应包含在每个请求中。

    引用:https://getcomposer.org/doc/04-schema.md#files

    "autoload": {
        "files": ["./data/generated-conf/config.php"],
        "classmap": ["./data/generated-classes/"]
    }