Laravel 5 изменить общедоступный путь()


Я пытаюсь переместить папку public в другое место. Однако я не могу найти место для изменения переменной public_path(). Теперь "public_path()" возвращает неверный путь к папке.

Где я могу установить переменную для public_path()?

Author: Moppo, 2015-08-01

5 answers

Вы можете переопределить общедоступный путь с помощью контейнера ioc:

Что сработало для меня безупречно, так это добавление к public/index.php следующих трех строк:

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

Для более подробного объяснения нажмите здесь

 30
Author: Jigs Virani, 2015-08-01 06:19:15

Хотя принятый ответ работает для запросов, поступающих с 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';
}

Вот и все! Вы можете перезаписать любой метод в классе приложения одинаково путь.

 43
Author: ruuter, 2015-11-16 08:33:49

Я предлагаю вам добавить его в app/Providers/AppServiceProvider.php:

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

Это также влияет на artisan.

 4
Author: Broshi, 2018-05-09 20:31:51
$app->bind('path.public', function() {
  return base_path().'/mynewpublic';
});
 0
Author: macieks, 2016-01-24 17:13:43

В laravel 5.6 эта работа для меня... добавление этого кода в bootstrap/app.php :

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

Где __РЕЖ.__.'/../' является ли путь к вашей общей папке

 0
Author: AnasSafi, 2018-07-16 06:18:57