Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
В общем сам нашёл решение проблемы. Нужно было установить composer на хостинг и запустить команду
composer dump-autoload
.
В общем интересная вещь. Запилил кучу миграций на локальном сервере, отладил их путем
php artisan migrate
и
php artisan migrate:reset
Всё работает, без проблем. Далее налепил кучу классов для заполнения таблиц в папке seeds. И, следовательно, протестил работу скрипта по загрузке данных в бд:
php artisan db:seed
Здесь тоже всё отрабатывает отлично, сайт после этих испытаний отображается по-прежнему, без боков. Далее заливаю все эти изменения на хостинг. Отмечу, что до этого момента этот проект уже был на хостинге, но базу туда я импортировал средствами MySQL. И там он тоже отображался отлично. И теперь хотел же протестировать миграции и заполнения начальными данными на сервере хостера. Всё это делаем, естественно, по SSH. И что удивительно
php artisan migrate
и
php artisan migrate:reset
отрабатывают на хостинге корректно, таблицы удаляются и создаются без ошибок. А при попытке запустить
php artisan db:seed
первый же класс в списке метода run() класса DatabaseSeeder скрипт уже не видит и я получаю такую ошибку:
Class UsersTableSeeder does not exist
Это удивительно только потому, что папки migrations и seeds находятся в одном каталоге. То есть если бы была проблема с доступом к чему-либо (неверные пути где-то, я хз), то и миграции бы не работали. А здесь как-то странно всё происходит. Я не знаю нужно ли выкладывать какой-то код сюда, я даже не знаю что. Ибо в самом коде вопросов нет.
Версия Laravel: 5.5.25
Версия PHP: 7.2.0
Операционная система и её версия: ubuntu16.04.1
Вендор и версия сервера БД:
Вендор и версия Веб-сервера: nginx/1.13.3
Обнаружилось тут странное поведение в коде. Весь код выкладывать не буду, нет смысла. Покажу основной момент в чем проблема. Создал контроллер IndexController, который наследуется от базового AdminController. И маршрут к нему, точнее группу маршрутов:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function (){
Route::get('/', ['uses' => 'Admin\IndexController@index', 'as' => 'adminIndex']);
Route::resource('articles', 'Admin\ArticlesController', ['as' => 'admin']);
});
Код AdminController
class AdminController extends Controller
{
protected $user;
public function __construct()
{
$this->user = Auth::user() // null
}
public function renderOutput()
{
$this->user = Auth::user() // возвращается модель User
}
}
Код IndexController
class IndexController extends AdminController
{
public function __construct()
{
parent::__construct();
}
public function index()
{
return $this->renderOutput();
}
}
Ну вот, собственно, из комментариев в коде AdminController должно быть ясна суть вопроса. Изначально задумывалось после аутентификации сохранять юзера в переменную в конструкторе. Но не тут то было. В этот момент его еще нет. Хотя посредник Auth уже пройден. А вот во время вызова функции renderOutput() он чудесным образом появляется. Не пойму в чём причина такого странного поведения. Это же никак не логично сохранять юзера в функции, которая для этого не предназначена. Как раз для таких дел нужен конструктор. Этот код взят из обучающего материала, где он выполнялся на версии Laravel 5.2. И там он корректно работал. В версии 5.5 это уже не работает. Сможет ли кто объяснить почему так?
Страницы 1