Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Laravel 5 на виртуальном хостинге - неправильный public_path ()

Автор вопроса: johnnydoe82Ответов: 3

Я развернул проект Laravel 5 в учетной записи общего хостинга, разместив файлы приложений за пределами www-папки, поместив только общую папку внутри www-папки. Все, как описано здесь, в лучшем ответе: Laravel 4 и способ развертывания приложения с использованием FTP ... без 3. потому что этого файла нет в Laravel 5.

Теперь, когда я вызываю public_path () внутри контроллера, я получаю что-то вроде my-appfiles-outside-of-www / public вместо www / public сильный>. Кто-нибудь знает, почему я здесь не иду по правильному пути? Могу я это где-нибудь поменять? Спасибо!

phplaravel-5shared-hosting

Ответы

Ответ 1 · рейтинг 8 · mcklayin

Вы можете переопределить public_path с помощью контейнера. Пример:

App::bind('path.public', function() {
    return base_path().'/public_html';
});

Ответ 2 · рейтинг 3 · Mahdi mehrabi

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

напишите приведенный выше код в public_html \ index.php выше этого кода

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

Ответ 3 · рейтинг 2 · mcProgrammer

Есть ряд решений, например, изменение index.php или принятое решение с контейнером ioc.

На мой взгляд, решение, которое работает лучше всего, описано в этом вопросе SO: Laravel 5 change public_path ( )

Почему это лучше других решений? Поскольку он работает с обычным HTTP-запросом, используйте ремесленник и использование phpunit для тестирования! Например. изменение index.php работает только для HTTP-запросов, но приводит к сбоям при использовании PHPunit (в моем случае: file (...) не определен в манифесте ресурса).

Краткое описание этого решения: Шаг 1: В файле: bootstrap / app.php измените самое первое объявление переменной $ app с:

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

to:

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

Это указывает на ваш собственный класс Application, который мы создадим на шаге 2.

Шаг 2: Создайте файл Application.php в папке приложения:

<?php namespace App;

class Application extends \Illuminate\Foundation\Application
{
   public function publicPath()
   {
       return $this->basePath . '/../public_html';
   }
}

Обязательно измените путь под свои нужды. Пример предполагает такую ​​структуру каталогов:
°° laravel_app
°°°° приложение
°°°° bootstrap
°°°° config
°°°° ... °° public_html

В случае OP путь, вероятно, должен быть

return $this->basePath . '/../www/public';

(вверх на один от laravel_app, затем вниз на www / public)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы