在Laravel中将Public添加到资产路径

use*_*278 5 php laravel laravel-5

我想在共享托管中安装laravel,我按照这里的步骤/sf/answers/1991466641/,但我的资产路径未包含公共目录

代替这个

<link href='http://example.com/public/assets/css/style.css' type='text/css' media='all' />
Run Code Online (Sandbox Code Playgroud)

我得到这个

<link href='http://example.com/assets/css/style.css' type='text/css' media='all' />
Run Code Online (Sandbox Code Playgroud)

如何在不更改任何核心类的情况下更改资产文件夹的目录(将公共资源添加到资产)?

Udo*_* E. 15

对于最新版本的 Laravel - Laravel 5.8,在config/app.php 中有一个名为asset_url 的键。这个键的值决定了asset()方法返回的值。通常,如果您的所有资产文件夹都在默认位置(此默认位置是Laravel 安装根目录下的公共文件夹),您应该将此键的值设置为您网站的基本 url 。

例如,如果您的网站 url 是“ https://www.example.com ”,并且您想访问根文件夹下的资产路径public/assets/css/sample.css,请在 config/app.php 中设置 asset_url,如这个:

'asset_url' => env('ASSET_URL', 'https://www.example.com'),
Run Code Online (Sandbox Code Playgroud)

并像这样使用资产功能:

asset('assets/css/sample.css')
Run Code Online (Sandbox Code Playgroud)

此后,通过在 Laravel 安装文件夹中运行它来重新配置缓存:

这将更新bootstrap/cache/config.php文件。如果您检查浏览器,则为您的资产生成的 url 将是“ https://www.example.com/assets/css/sample.css ”。

你可以有这样一个有效的URL的一种方式:“ https://www.example.com/public/assets/css/sample.css ”是创建一个名为其他文件夹公共您已经现有的公共文件夹内-这是不直观为了我。但是,如果这样做,则在使用资产功能时必须包含此路径:

asset('public/assets/css/sample.css')
Run Code Online (Sandbox Code Playgroud)


Rob*_*bok 6

Laravel 5.7.14 之前

看看Illuminate\Routing\UrlGenerator类及其asset($path, $secure = null)方法。此类正在通过url密钥放入容器。你可以做的是:

  1. 添加您自己的类,扩展UrlGenerator
  2. asset($path, $secure = null)方法添加到您自己的类中,使其返回您需要的任何内容;
  3. 创建一个服务提供者并在其中注册config/app.php
  4. 在您的服务提供者的register()方法中,通过url键将您的新类绑定到容器。

这样,您根本不会接触核心文件,并且您的 Laravel 应用程序仍然易于更新。

Laravel 5.7.14 及更高版本的更新

正如其他答案所述,有ASSET_URL.env 选项,这使得更改公共路径变得更加容易。Laravel 在 Laravel 5.7.14 中引入了它,该版本在我最初的回答大约 3 年后发布。


小智 5

在您的.env文件中添加ASSET_URL = public,然后运行php artisan config:cache

  • 运行 `php artisan config:cache` 会导致[问题](https://github.com/UniSharp/laravel-filemanager/issues/323) (3认同)
  • 我正在使用 Laravel 8。谢谢@Abid_015,这对我有用。 (2认同)