Я развернул проект Laravel 5 в учетной записи общего хостинга, разместив файлы приложения вне www-папки, поместив только общую папку внутри www-папки. Все как объяснено здесь, в лучшем ответе: Laravel 4 и способ развертывания приложения с использованием FTP… без 3. потому что этот файл не существует в Laravel 5.
Теперь, когда я вызываю public_path () внутри контроллера, я получаю что-то вроде мой-appfiles-вне-из-WWW/ общественности вместо WWW / общественности. Кто-нибудь знает, почему я не понимаю правильный путь здесь? Могу ли я изменить это где-нибудь?
Спасибо!
Вы можете переопределить public_path, используя контейнер.
Пример:
App::bind('path.public', function() {
return base_path().'/public_html';
});
Существует ряд решений, таких как изменение index.php или принятое решение с контейнером ioc.
Решение, которое работает лучше всего, на мой взгляд, описано в этом вопросе SO:
Laravel 5 изменить public_path ()
Почему это лучше, чем другие решения? Поскольку он работает для обычного http-запроса, используйте artisan и phpunit для тестирования! Например. изменение index.php работает только для http-запросов, но приводит к сбоям при использовании PHPunit (в моем случае: файл (…) не определен в манифесте актива).
Краткий обзор этого решения:
Шаг 1: В файле: bootstrap / app.php измените самое первое объявление переменной $ app с:
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
чтобы:
$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
приложение
°°°° самозагрузки
°°°° конфигурации
°°°° …
оо public_html
В случае OP путь, вероятно, должен быть
return $this->basePath . '/../www/public';
(до одного из laravel_app, затем до www / public)
$app->bind('path.public', function() {
return __DIR__;
});
написать код выше в public_html \ index.php выше этого кода
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);