2015-04-27 2 views
2

Я развернул проект Laravel 5 на общую учетную запись хостинга, разместив файлы приложений вне www-папки, разместив только общую папку внутри www-папки. Все, как описано здесь, в лучший ответ: Laravel 4 and the way to deploy app using FTP ... без 3. потому что этот файл не существует в Laravel 5.Laravel 5 на общем хостинге - неправильный public_path()

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

ответ

4

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

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

Можете ли вы сказать, где разместить этот код? – johnnydoe82

+1

Service proivder - лучший способ сделать это, я думаю – mcklayin

+0

Какой файл над кодом нужно разместить, пожалуйста, отправьте полное решение – Marwan

2

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

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

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

Краткое повторение этого решения: Шаг 1: В файле: самозагрузки/app.php изменить самую первую декларацию переменной $ приложения от:

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

к:

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

Это указывает на ваш собственный класс приложений, который мы создадим на этапе 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


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

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

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

Смежные вопросы