Laravel 5改变public_path()

use*_*781 47 php laravel laravel-5

我想将public文件夹移动到其他地方.但是,我找不到修改public_path()变量的地方.现在,'public_path()'返回错误的文件夹路径.

我在哪里可以设置变量public_path()

Jig*_*ani 48

您可以使用ioc容器覆盖公共路径:

完美无缺的是增加public/index.php了以下三条线:

 $app->bind('path.public', function() {
    return __DIR__;
});
Run Code Online (Sandbox Code Playgroud)

有关详细说明,请单击此处

  • 尝试使用您的解决方案,它适用于显示网页.但是,它对工匠命令不起作用.工匠仍然将`public_path`引用到默认的公共路径. (7认同)
  • @ user1995781,可以在命令的“ index.php”文件“ artisan”中应用相同的代码。 (2认同)
  • 也感谢您提供参考链接。 (2认同)

ruu*_*ter 44

虽然接受的答案适用于来自HTTP的请求,但它不起作用artisan.

如果您需要artisan知道自定义公共路径,则需要扩展Laravel主Application类.我知道这听起来很可怕,但实际上非常简单.

您需要做的就是:
步骤1:在文件中:bootstrap/app.php更改$app变量的第一个声明

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);
Run Code Online (Sandbox Code Playgroud)

反映您自己的自定义Application类:

$app = new App\Application(
    realpath(__DIR__.'/../')
);
Run Code Online (Sandbox Code Playgroud)

第2步:在某处定义自定义Application类.例如在app/Application.php

<?php namespace App;

class Application extends \Illuminate\Foundation\Application
{
}
Run Code Online (Sandbox Code Playgroud)

恭喜!您已经扩展了Laravel核心Application类.

第3步:覆盖publicPath方法.将Laravel原始方法复制并粘贴到新课程中并根据需要进行更改.在我的特定情况下,我确实喜欢这样:

public function publicPath()
{
    return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html';
}
Run Code Online (Sandbox Code Playgroud)

而已!您可以用相同的方式覆盖Application类中的任何方法.


Bro*_*shi 15

我建议你加入app/Providers/AppServiceProvider.php:

public function register()
{
    $this->app->bind('path.public', function() {
        return realpath(base_path().'/../public_html');
    });
}
Run Code Online (Sandbox Code Playgroud)

artisan也会影响.


Ana*_*afi 7

在laravel 5.6中,这对我有用...将此代码添加到bootstrap / app.php中:

$app->bind('path.public', function() {
    return realpath(__DIR__.'/../');
});
Run Code Online (Sandbox Code Playgroud)

其中__DIR __。“/ .. /”是路径公用文件夹