Задать вопрос
Ответы пользователя по тегу Laravel
  • Почему вместо id записи выводится id связанной таблицы?

    Vatrush
    @Vatrush Автор вопроса
    Решение.
    Добавить pivot в модель User:
    return $this->belongsToMany('App\Category','category_users')->withPivot('id');

    Вызов во view в цикле:
    $var->pivot->id
    Ответ написан
  • Как выводить представление по одному и тому же маршруту в зависимости от условия?

    Vatrush
    @Vatrush Автор вопроса
    Вот как я решил это.
    Я создал контроллер главной страницы:
    class HomeController extends Controller
    {
        public function index()
        {
            if(!Auth::check()){
                return view('layouts/login');
            }
            return view('index');
        }
        public function main()
        {
            if(!Auth::check()){
                return view('layouts/login');
            }
            return view('layouts/main');
        }
    }

    Затем в роутах прописал вот так:
    Route::get('/', 'HomeController@index')->name('index');
    Route::get('/', 'HomeController@main')->name('main');

    UPD исправление плохого кода.


    Как я сделал выше - неправильно.
    Переделал вот так, ибо я не взял во внимание то, что шаблон выводится независимо от роутера, и я выводил его зачем-то по роуту '/' :
    HomeController.php
    class HomeController extends Controller
    {
        public function main()
        {
            if(!Auth::check()){
                return view('layouts/login');
            }
            return view('layouts/main');
        }
    }

    web.php
    Route::get('/', 'HomeController@main')->name('main');

    Дальше я столкнулся с проблемой, что если гость переходит по пути который существует на сайте, то вылетает ошибка которая в вопросе вместо редиректа, независимо от того, что маршруты которые нужно запретить находятся в группе роутов auth.
    Исправил вот так (не знаю насколько правильно, знатоки мб подскажут):
    В Handler.php в конце метода rednder()
    if(!Auth::guest()){
        return parent::render($request, $exception);
    } else {
        return redirect()->guest('/LOGIN.PAGE.HERE');
    }

    После этого если гость переходит по существующему маршруту, его перекидывает на страницу логина, в моем случае '/'.
    Так же я убрал ВСЕ return view для маршрутов в роутере и прописал все это в контроллере HomeController, а web.php привел к такому виду:
    Route::get('/path', ['as' => 'name', 'uses' => 'MainController@method']);
    Ответ написан
    Комментировать