【问题标题】:Laravel, Composer: File autoload not workingLaravel,作曲家:文件自动加载不起作用
【发布时间】:2017-12-28 09:35:13
【问题描述】:

我使用 Laravel 5.4 并想自动加载一个 helpers.php 文件,其中包含我想在整个项目中使用的辅助函数(尤其是在我的控制器中)。

我的 composer.json 看起来像这样:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.7"
    },
    "autoload": {
        "files": [
            "app/Http/helpers.php"
        ],
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "files": [
            "app/Http/helpers.php"
        ],
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    }
}

我的 helpers.php 看起来像:

<?php
namespace App\Http;

function combineColumnNameType($columnLabels, $columnTypes) {
    $combined = [];
    // logic
    return $combined;
}

我的问题是,当我尝试在我的一个控制器中使用 helpers.php 函数时,它会抛出以下错误消息:

Call to undefined function App\Http\Controllers\combineColumnNameType()

我尝试composer dump-autoload 几次,但没有帮助。

我也试过composer update。

有什么问题?

【问题讨论】:

    标签: php laravel composer-php


    【解决方案1】:

    composer.json 看起来不错,但看起来您使用的助手错误。辅助函数应该是一个简单的函数,如下所示:

    if (! function_exists('myCustomHelper')) {
        function myCustomHelper()
        {
            return 'Hey, it\'s working!';
        }
    }
    

    你应该用myCustomHelper()而不是$this-&gt;myCustomHelper()来调用它。

    更新

    helpers.php 不应有 namespace 或类定义。​​

    【讨论】:

    • @J.B.它不应该有命名空间或类。另外,如何在控制器中使用帮助器?
    • 我只是像这样调用函数combineColumnNameType(User::$labels, User::$columnTypes)
    • 啊,命名空间破坏了它。没有它的工作正常。您可以编辑您的答案以便我接受吗?
    • @J.B.我已将此添加到我的答案中。高德帮了大忙。 )
    猜你喜欢
    • 2016-05-26
    • 2015-12-24
    • 2014-01-31
    • 1970-01-01
    • 2017-02-26
    • 2018-06-15
    • 2016-10-20
    • 2016-08-01
    • 2020-06-24
    相关资源
    最近更新 更多