Подтвердить что ты не робот

Laravel 5 изменить public_path()

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Congrats! Вы расширили основной класс приложений Laravel.

Шаг 3: Перезаписать метод publicPath. Скопируйте и вставьте оригинальный метод Laravel в ваш новый класс и измените его на свои нужды. В моем конкретном случае мне это понравилось:

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

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

Ответ 3

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