【问题标题】:Propel and Composer in PHP: no connectionPHP 中的 Propel 和 Composer:无连接
【发布时间】:2015-03-15 00:24:34
【问题描述】:

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

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

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

在 /data/ 文件夹中,我将存储我所有的推进文件,即 generate-classes/ 、 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 应该足够了。不幸的是,当我尝试在此页面中使用一个推进类时,返回错误

类型:Propel\Runtime\Exception\RuntimeException

消息:没有为数据库“my_api”定义连接。是忘记定义连接还是写错了?

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

行:279

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

作为额外的,如果在 index.php 中,我只需添加

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

一切顺利。

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

感谢阅读。

【问题讨论】:

  • 也很好奇。

标签: php configuration composer-php propel autoload


【解决方案1】:
  • CLI 命令的顺序很重要:

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

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

    参考:https://getcomposer.org/doc/04-schema.md#files

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2014-08-30
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多