Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Db:seed работает некорректно на хостинге » 05.02.2018 05:11:08

В общем сам нашёл решение проблемы. Нужно было установить composer на хостинг и запустить команду

composer dump-autoload

.

#2 Laravel 5.x » Db:seed работает некорректно на хостинге » 05.02.2018 02:38:42

Faltfromoss
Ответов: 1

В общем интересная вещь. Запилил кучу миграций на локальном сервере, отладил их путем

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 находятся в одном каталоге. То есть если бы была проблема с доступом к чему-либо (неверные пути где-то, я хз), то и миграции бы не работали. А здесь как-то странно всё происходит. Я не знаю нужно ли выкладывать какой-то код сюда, я даже не знаю что. Ибо в самом коде вопросов нет.

#3 Laravel 5.x » Auth::user() = null в конструкторе контроллера » 03.02.2018 02:31:04

Faltfromoss
Ответов: 1

Версия 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 это уже не работает. Сможет ли кто объяснить почему так?

Подвал раздела