Laravel 5 更改 public_path()

问题描述 投票:0回答:8

我正在尝试将

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

在哪里可以设置

public_path()
的变量?

php laravel laravel-5
8个回答
82
投票

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

对我来说完美的工作是添加到

public/index.php
以下三行:

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

更详细的解释请点击这里


50
投票

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

artisan

如果您需要

artisan
知道您的自定义公共路径,您需要扩展 Laravel 主应用程序类。我知道这听起来很可怕,但实际上非常简单。

您需要做的就是以下:
第 1 步: 在文件中:

bootstrap/app.php
更改
$app
变量的第一个声明

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

反映您自己的自定义应用程序类:

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

第 2 步: 在某处定义自定义应用程序类。例如在

app/Application.php

<?php namespace App;

class Application extends \Illuminate\Foundation\Application
{
}

恭喜!您已经扩展了 Laravel 核心应用程序类。

第3步:覆盖

publicPath
方法。将 Laravel 原始方法复制并粘贴到您的新类,然后根据您的需要进行更改。在我的具体情况下,我确实是这样的:

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

就是这样!您可以以同样的方式覆盖 Application 类中的任何方法。


28
投票

我建议你添加它在

app/Providers/AppServiceProvider.php
:

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

这也会影响

artisan


10
投票

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

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

其中 __DIR__.'/../' 是公共文件夹的路径


4
投票

就我而言,在 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 文件夹,你可以随意放置。


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

0
投票

您是否尝试过更新 filesystems.php

'disks' => [

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

0
投票

在 .env 文件更新

FILESYSTEM_DISK=public

在你的函数代码中直接设置路径就像

 $path = 'folder_name';
 $request->file->move($path, $fileName);

更改配置/filesystems.php

'public' => [
        'driver' => 'local',
        'root' => public_path() . '/uploads',
        'url' => env('APP_URL').'/public',
        'visibility' => 'public',
        'throw' => false,
    ],
© www.soinside.com 2019 - 2024. All rights reserved.