如何 link Laravel 中模块内部的资产?

How to link assets which are inside of module in Laravel?

我在使用模块时无法提供图像等资产,css,javascript。每个模块都有一组资产,例如 javascript、css、该特定模块资源文件夹内的图像,我刚刚编译到模块的 public 文件夹内。我无法向 link 提供该资产。

我这样提供link

<link href="{{ asset('modules/robust/core/public/admin/css/app.css') }}" rel="stylesheet">

显示的是这种结果

我想我应该为模块资产定义自定义路径,但我不知道该怎么做。请帮助我。

文件夹结构是这样的

根据我们在评论中的对话,我建议您按以下方式划分您的项目

  • app/Modules/

    • 博客/
    • 核心/
    • 等.../
  • public/

    • blog/css
    • blog/js
    • blog/images
    • core/css
    • core/js
    • core/images
    • 等.../css
    • 等.../js
    • 等.../图片

然后在控制器中使用这样的命令

$this->loadViewsFrom()

并且在视图中,您可以使用这个

{{ asset('blog/images/myimage.jpg') }}

如果还有其他问题,请在下方评论告诉我:)

很高兴我能帮上忙 :D

您可以在 route.php 文件中创建路由路径:

Route::get('/assets/{module}/{type}/{file}', [ function ($module, $type, $file) {
    $module = ucfirst($module);

    $path = app_path("Modules/$module/Resources/Blocks/$type/$file");

    if (\File::exists($path)) {
        return response()->download($path, "$file");
    }

    return response()->json([ ], 404);
}]);

{{ Module::asset('blog:js/script.js') }}

这假设您的脚本位于 /Modules/ModuleName/Assets/js/script.js。如果不在文件夹中,只需在资产调用中省略 js/ 部分即可。

使用这个命令:

php artisan module:publish 

并像这样获取资产文件:

{{ Module::asset('blog:js/script.js') }}