Laravel 5改变public_path()

时间:2015-08-01 06:13:26

标签: php laravel laravel-5

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

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

7 个答案:

答案 0 :(得分:43)

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

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

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

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);

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

$app = new App\Application(
    realpath(__DIR__.'/../')
);

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

<?php namespace App;

class Application extends \Illuminate\Foundation\Application
{
}

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

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

public function publicPath()
{
    return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html';
}

那就是它!您可以用相同的方式覆盖Application类中的任何方法。

答案 1 :(得分:42)

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

对我来说完美无缺的是在public/index.php增加了以下三行:

 $app->bind('path.public', function() {
    return __DIR__;
});

For more detailed explanation click here

答案 2 :(得分:11)

我建议你将其添加到app/Providers/AppServiceProvider.php

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

这也会影响artisan

答案 3 :(得分:4)

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

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

其中 __ DIR __。'/ .. /'是您的公用文件夹的路径

答案 4 :(得分:1)

$app->bind('path.public', function() {
  return base_path().'/mynewpublic';
});

答案 5 :(得分:1)

以我在Laravel 6.0中的工作为例。
此文件: bootstrap / app.php

......
$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) );

$app->bind('path.public', function() {
    return realpath(__DIR__.'/../httpdocs'); });
.....

我更改了 public_path()文件夹,此示例与 httpdocs 文件夹一起使用,您可以随意放置它。

答案 6 :(得分:0)

您是否尝试过更新filesystems.php

'disks' => [

    'public' => [
       'driver' => 'local',
             'root' => env('PATH_PUBLIC'),
       'visibility' => 'public',
       'url' => env('SITE_ROOT'),
    ],