我想在共享托管中安装laravel,我按照https://stackoverflow.com/a/28449523中的步骤操作,但我的资产路径并未包含公共目录
而不是这个
<link href='http://example.com/public/assets/css/style.css' type='text/css' media='all' />
我得到了这个
<link href='http://example.com/assets/css/style.css' type='text/css' media='all' />
如何在不更改任何核心类的情况下更改资产文件夹的目录(将公共内容添加到资源)?
答案 0 :(得分:3)
查看Illuminate\Routing\UrlGenerator
类及其asset($path, $secure = null)
方法。这个类被url
键放到容器中。你能做的是:
UrlGenerator
; asset($path, $secure = null)
方法添加到您自己的类中,使其返回您需要的任何内容; config/app.php
; register()
方法中,绑定您的新课程
通过url
键到容器。这样,您根本无法触摸核心文件,而且您的Laravel应用程序仍然更新友好。
答案 1 :(得分:1)
相对容易的黑客方法是在\ vendor \ laravel \ framework \ src \ Illuminate \ Routing \ UrlGenerator.php 中的asset()函数的返回值中添加文件夹
static void Main(string[] args)
{
using (var client = new HttpClient())
{
using (var response = client.GetAsync("https://example.com/").Result)
{
if (response.Content is StreamContent)
{
var webExceptionWrapperStream = GetPrivateField(response.Content, "content");
var connectStream = GetBasePrivateField(webExceptionWrapperStream, "innerStream");
var connection = GetPrivateProperty(connectStream, "Connection");
var tlsStream = GetPrivateProperty(connection, "NetworkStream");
var state = GetPrivateField(tlsStream, "m_Worker");
var protocol = (SslProtocols)GetPrivateProperty(state, "SslProtocol");
Console.WriteLine(protocol);
}
else
{
// not sure if this is possible
}
}
}
}
private static object GetPrivateProperty(object obj, string property)
{
return obj.GetType().GetProperty(property, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj);
}
private static object GetPrivateField(object obj, string field)
{
return obj.GetType().GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj);
}
private static object GetBasePrivateField(object obj, string field)
{
return obj.GetType().BaseType.GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj);
}
请注意,我已根据条件在返回值中添加了public。这样也可以做到。
答案 2 :(得分:0)
在您的 .env 文件中添加 ASSET_URL = public 并运行 php artisan config:cache
答案 3 :(得分:0)
对于最新版本的Laravel-Laravel 5.8,在 config / app.php 中有一个名为 asset_url 的密钥。该键的值确定 asset()方法返回的值。通常,如果所有资产文件夹都位于默认位置(此默认位置是Laravel安装根目录下的 public 文件夹),则应将此密钥的值设置为网站的基本URL。 )。
例如,如果您的网站URL为“ https://www.example.com”,并且您想访问根文件夹下的资产路径 public / assets / css / sample.css ,请在config / app.php像这样:
T
并使用资产功能,如下所示:
'asset_url' => env('ASSET_URL', 'https://www.example.com'),
此后,通过在laravel安装文件夹中运行缓存来重新配置缓存:
asset('assets/css/sample.css')
这将更新 bootstrap / cache / config.php 文件。如果您检查浏览器,则资产的生成URL将为“ https://www.example.com/assets/css/sample.css”。
拥有有效网址(例如:“ https://www.example.com/public/assets/css/sample.css”)的一种方法是,在已经存在的公用文件夹中创建另一个名为 public 的文件夹-这对我来说是不直观的。 但是,如果这样做,则在使用资产功能时必须包括以下路径:
php artisan config:cache