Я развернул проект Laravel 5 в учетной записи общего хостинга, разместив файлы приложений за пределами www-папки, поместив только общую папку внутри www-папки. Все, как описано здесь, в лучшем ответе: Laravel 4 и способ развертывания приложения с использованием FTP ... без 3. потому что этого файла нет в Laravel 5.
Теперь, когда я вызываю public_path () внутри контроллера, я получаю что-то вроде my-appfiles-outside-of-www / public вместо www / public сильный>. Кто-нибудь знает, почему я здесь не иду по правильному пути? Могу я это где-нибудь поменять? Спасибо!
Ответ 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)