在Laravel 5.2中获取未定义的调用函数

时间:2016-03-10 22:28:03

标签: laravel laravel-5 laravel-5.2

我从控制器调用一个简单的函数:

flash('my message');

flash函数位于App \ Http

中的helpers.php文件中
function flash($message)
{
    $flash = app('App\Http\Flash');

    return $flash->message($message);
}

flash函数调用Flash对象

namespace App\Http;

class Flash{

     public function message($message)
     {
            session()->flash('flash_message', $message);
     }
}

Composer.json包括:

"autoload": {
        "files": [
          "app/Http/helpers.php"
        ],

执行命令 - composer dump-autoload

页面显示 - 调用未定义的函数App \ Http \ Controllers \ flash()

我尝试了很多东西!即使我在helpers.php文件中添加了一个很小的测试函数,我也无法在控制器中使用它 这是命名空间问题吗?我不认为我必须在控制器顶部添加使用xxxx; ,因为helpers.php被添加到autoload和global?

EDIT。

我认为注册helpers.php文件是关键所在。我所做的只是将一些函数添加到全局文件中,但无法从我的控制器中获取它们。我在helpers.php文件中添加了一个非常简单的函数但是无法从控制器访问它:我是否需要向控制器添加任何东西以便能够使用帮助文件?

我设法通过在控制器方法中包含helpers.php文件来实现这一目的:

include(app_path() . '/helpers.php');
flash('my message');

现在允许我调用该函数。所以自动加载不起作用!有点困惑......

更新。 我必须将所需的函数放入类中并调用该类。这现在工作正常。我无法让helpers.php自动加载任何内容。

2 个答案:

答案 0 :(得分:-1)

我会将帮助文件放在全局位置和composer.json文件中:

"files":[
    "app/helper.php"
],

helper.php

function newflash($message)
{
    session()->flash('flash_message', $message);
}

执行composer dump-autoload

就这么简单。

现在,您可以从应用程序的任何位置调用newflash()方法。

答案 1 :(得分:-1)

不要忘记在服务提供商处注册您的课程。