自定义助手在 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 文件中使用了名称空间
这个帖子救了我
编辑 对于那些可能遇到类似错误的帖子 从 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 文件中使用了名称空间
这个帖子救了我