不能自动加载helper文件- Laravel 5.3


Can't autoload a helper file - Laravel 5.3

我有一个帮助文件位于

app/Helpers/Navigation.php

帮助文件,命名空间:

   <?php
namespace App'Helpers;
class Navigation
{
    public static function isActiveRoute($route, $output = 'active')
    {
        if (Route::currentRouteName() == $route) {
            return $output;
        }
    }
}

我想自动加载这个文件。所以在我的作曲家中。Json我有这个:

"autoload": {
    "classmap": [
      "database"
    ],
    "psr-4": {
      "App''": "app/"
    },
    "files": [
      "app/Helpers/Navigation.php"
    ]
  },

在我看来,我想这样做:

<li class="{{ isActiveRoute('main') }}">

但是我得到错误:

Call to undefined function isActiveRoute()

不知道我做错了什么。我做了composer dumpautolload当我改变了composer文件。我试着再次安装composer,也没有改变任何东西

我有同样的问题,我假设你使用的是inspinia laravel版本,所以问题是他们忘记删除文件app/Helpers/Navigation.php

如果你看AppServiceProvider,他们使用的是"/. ./Http/帮助/Helpers.php"

如果你想做Navigation::isActiveRoute然后使用类文件

但是如果你想使用{{ isActiveRoute('youRouteName') }},那么你需要使用'/../Http/Helpers/Helpers.php'中的函数,而不需要使用de composer。Json(在另一个问题的另一个解决方案中提出)

我知道我也有同样的感觉。

ps: Please sorry about my english

对于helpers文件,您不希望使用类。你只需要定义你想要使用的函数。

此外,将函数包装在检查中以确保该函数不存在也是一种好做法。

将您的Naviation.php内容替换为:

<?php
if (! function_exists('isActiveRoute')) {
    /**
     * [Description of this function]
     * 
     * @param $route
     * @param string $output
     * @return string
     */
    function isActiveRoute($route, $output = 'active')
    {
        if (Route::currentRouteName() == $route) {
            return $output;
        }
    }
}

希望这对你有帮助!

当你的helper文件是一个类时,就不需要自动加载它了。

config/app.php中创建别名:

'aliases' => [
 ...
    'NavigationHelper' => App'Helpers'Navigation::class,
 ...

在你的Blade模板中使用:

<li class="{{ NavigationHelper::isActiveRoute('main') }}">
最后,您可以从composer.json文件中删除以下代码,并运行composer dumpautoload
"files": [
  "app/Helpers/Navigation.php"
]