自定义助手在 laravel 中不工作,它 return 控制器中的未定义函数

Custom helper not working in laravel, it return undefined function in controller

编辑 对于那些可能遇到类似错误的帖子 从 helpers.php 文件中删除命名空间,因为它不是 class.

在我自己的例子中,正确的代码应该是

use Illuminate\Http\Request;
use App\Models\User;
use Session;




function showTest(){
    return "test";
}

..而不是

namespace App\Helpers;

use Illuminate\Http\Request;
use App\Models\User;
use Session;




function showTest(){
    return "test";
}

原题

我希望使用助手在 laravel 中编写一个全局函数。

这是我的代码 helpers.php

namespace App\Helpers;

use Illuminate\Http\Request;
use App\Models\User;
use Session;




function showTest(){
    return "test";
}

Composer.json

"autoload": {
        "psr-4": {
            "App\": "app/",
            "Database\Factories\": "database/factories/",
            "Database\Seeders\": "database/seeders/"
        },

        "files":[
            "app/Helpers/helpers.php"
        ]
    },

但是当我调用控制器中的函数时 returns 错误;

dd(showTest());

是returns这个错误;

Call to undefined function App\Http\Controllers\User\showTest()

可能是什么问题?

我还有 运行 composer dump-autoload

已修改

我已经尝试了此处发布的所有解决方案,但均无效。

Php 8 Laravel 9

你需要 运行 composer dump-autoload 它会起作用。

更多详情click here

尝试将它们加载到 AppServiceProvider 启动方法而不是 composer 文件中。

require_once app_path('Helpers/helpers.php');

composer.json

"autoload": {
   "psr-4": {
       "App\": "app/",
       "Database\Factories\": "database/factories/",
       "Database\Seeders\": "database/seeders/"
   },

   "files":[
       "app/Helpers/helpers.php",
      "app\Helpers\helpers.php",
   ]
},

hepler.php

<?php

if(!function_exists('showTest')){
    function showTest()
    {
        return "test";
    }
}

if(!function_exists('showTest2')){
    function showTest2()
    {
        return "test 2";
    }
}

和运行composer dump-autoload

另一种方法是在 Laravel 的服务容器中注册您的助手文件。

您可以在现有的服务提供商文件中执行此操作,也可以创建一个新文件,例如 HelperServiceProvider.php(可以使用 php artisan make:provider)

在服务提供者的注册方法中,你可以把你的帮助文件全局引用,这样

public function register()
{
    require_once(glob(app_path().'/Helpers/helpers.php');
}

如果你有多个文件,你可以简单地将它们放在一个 for each

public function register()
{
    foreach (glob(app_path().'/Helpers/*.php') as $filename){
        require_once($filename);
    }
}

首先我想为所有的麻烦道歉。

问题是我在 helpers.php 文件中使用了名称空间

这个帖子救了我