Laravel别名无法找到类

12

我想要为一个类注册别名,但是 Laravel 找不到这个类,我可以在控制器中直接引用这个类,所以我知道它已经被正确加载。

这是我的代码:

    'aliases' => array(
        'FrontendAssets' => 'Lib\FrontendAssets',
    )

我试图为其创建别名的类

class FrontendAssets{

    protected static $styles = [];
    protected static $scripts = [];

    public static function styles(){
        return static::assets(static::$styles);
    }

    public static function addStyle($style){
        static::$styles[] = $style;
    }

    public static function scripts(){
        $scripts = static::assets(static::$scripts);
        return $scripts;
    }

    public static function addScript($script){
        static::$scripts[] = $script;
    }

    public static function assets($assets){
        return array_map(function ($asset){
                return $asset;
        }, array_unique($assets));
    }
} 

这是我在控制器中尝试调用的内容

FrontendAssets::assets();

我已经尝试添加命名空间,但仍然没有成功。

如果我在控制器中使用\FrontendAssets::assets();, 我可以使用这个类,所以我知道它一定已经被加载了。

4个回答

16
php artisan config:clear

这可能也有所帮助。如果您在应用程序配置中定义了别名,而之前已使用config:cache缓存了配置文件,则需要注意。


这就是了!需要清除缓存以便Laravel检测到新的别名! :D - Gjaa

15

首先运行composer dump-autoload,确保类可以被找到。

现在,当您有命名空间中的控制器时,例如:

<?php

namespace App\Http\Controllers;

class YourController {

}

如果您想访问FrontendAssets类,您需要添加前导反斜杠,因此FrontendAssets::assets();将不起作用,但\FrontendAssets::assets();将起作用。

您也可以导入这个类:

<?php

namespace App\Http\Controllers;

use FrontendAssets;

class YourController {

}

现在,您将能够使用FrontendAssets :: assets();。如果不清楚,您可能还想查看如何在PHP中使用其他命名空间的对象以及如何导入命名空间的说明


这是正确的答案。我清除了缓存,但我错过了类前面的\,所以它不起作用。向上! - Arvind K.
我喜欢这种替代方法,这样我就不必添加\,但是多出来的那一行也没关系。 - Arvind K.

0

您需要清空缓存并卸载自动加载,您可以使用单个命令完成:

composer dump && php artisan optimize

0

Laravel 会缓存配置以避免运行时加载开销。您需要运行其中一个给定的 artisan 命令。

下面的命令将清除先前缓存的配置。

php artisan config:clear

以下命令将清除并重新缓存配置。

php artisan config:cache

清除配置缓存后,您将能够使用在config/app.php中定义的别名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接