【问题标题】:Laravel 4.2: Include a PHP file (library) into controllerLaravel 4.2:将 PHP 文件(库)包含到控制器中
【发布时间】:2014-10-30 23:16:29
【问题描述】:

我正在使用 Laravel 4.2 做一个项目,我需要在控制器中包含一个 PHP 文件(一个将 PDF 转换为文本的库),然后返回一个带有文本的变量,知道怎么做吗?

这是我的控制器

public function transform() {
    include ('includes/vendor/autoload.php');
}

还有我的 /app/start/global.php 文件:

ClassLoader::addDirectories(array(
    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/includes',

));

这是错误

include(includes/vendor/autoload.php): failed to open stream: No such file or directory

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    您可以在应用目录的某处创建一个新目录,例如app/libraries

    然后在您的 composer.json 文件中,您可以在您的自动加载类映射中包含 app/libraries

    {
        "name": "laravel/laravel",
        "description": "The Laravel Framework.",
        "keywords": ["framework", "laravel"],
        "license": "MIT",
        "require": {
            "laravel/framework": "4.2.*",
        },
        "autoload": {
            "classmap": [
                "app/commands",
                "app/controllers",
                "app/models",
                "app/libraries", <------------------ YOUR CUSTOM DIRECTORY
                "app/database/migrations",
                "app/database/seeds",
                "app/tests/TestCase.php"
            ]
        },
        "scripts": {
            "post-install-cmd": [
                "php artisan clear-compiled",
                "php artisan optimize"
            ],
            "post-update-cmd": [
                "php artisan clear-compiled",
                "php artisan optimize"
            ],
            "post-create-project-cmd": [
                "php artisan key:generate"
            ]
        },
        "config": {
            "preferred-install": "dist"
        },
        "minimum-stability": "stable",
    }
    

    请务必在修改您的 composer.json 后运行 composer dump-autoload

    假设您的类名为CustomClass.php,它位于app/libraries 目录中(因此完整路径为app/libraries/CustomClass.php)。如果您已正确命名您的类,按照惯例,您的命名空间可能会命名为libraries。为了清楚起见,我们将命名空间称为custom 以避免与目录混淆。

    $class = new \custom\CustomClass();
    

    或者,您可以在 app/config/app.php 文件中为其指定别名:

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */
    
    'aliases' => array(
        ...
        'CustomClass'   => 'custom\CustomClass',
        ...
    )
    

    您可以在应用程序的任何位置实例化该类,就像使用任何其他类一样:

    $class = new CustomClass();
    

    希望这会有所帮助!

    【讨论】:

    • 我已将 "app/libraries" 添加到我的 composer.json autoload->classmap 部分。然后我将 TextCleaner =&gt; 'libraries\TextCleaner 添加到我的 app/config/app.php 别名中。我试图像$imageCleaner = new \libraries\TextCleaner()$imageCleaner = new TextCleaner(); 一样实例化我的类,但我都说类不存在。是的,我已经成功运行了 composer dump-autload。
    • @BillGarrison 确保你已经为你的类命名。假设您的类的命名空间称为“帮助者”(namespace helpers; 在类的顶部)。在您的 config/app.php 文件中,您可以将其包含为 'TextCleaner' =&gt; 'helpers\TextCleaner'。我编辑了原始答案以帮助澄清。
    • 今天帮了我 :) +1
    【解决方案2】:

    我认为你是对的兄弟,但是,我找到了另一种方法,也许不是正确的方法,但它有效。

    就是这样,我创建了一个名为 Includes 的新文件夹并将我的文件放在那里,然后在 /app/start/global.php 中添加了这一行:

    require app_path().'/includes/vendor/autoload.php';
    

    现在正在工作:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2018-09-25
      • 2015-03-06
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多