Intereting Posts
Логическая ошибка для отображения данных таблицы MySQL Кудрявые скобки в строке в PHP Html / php-страница кэшируется (клиентская сторона), когда она не должна быть Перевод сообщений об ошибках проверки формы CodeIgniter Должен ли я регенерировать_session_id на каждой странице? Глубокий клон PHP Приложение C # должно отправлять некоторые данные на веб-сайт php, но должно уважать политику аутентификации не получить ошибку Исключение несоответствия токена в Verify csrf token в laravel 5.5 mysql order by max соответствует значению поля Как отображать сообщение только на домашней странице joomla? синтаксис ошибки синтаксического анализа неожиданный конец файла php как обрабатывать ошибку 403 с помощью PHP Определить индекс массива после вызова функции Что такое порядковое значение строки? Как я могу убедиться, что lastInsertId () не относится к другой одновременной вставке?

Laravel: Перенаправить в пользовательский класс?

Я не уверен, что это «правильный» способ делать вещи, но логика работает. У меня есть свой класс в настройке Laravel, который я use в контроллере. В моем контроллере я вызываю функцию в своем пользовательском классе, однако я бы хотел перенаправить пользователя, если что-то случится внутри этой функции.

После беседы в IRC мне сказали, что вы не можете делать перенаправление в своем классе, вам нужно «вернуть объект ответа перенаправления с контроллера ».

Не совсем уверен, что это значит, но я полагаю, что вам придется делать переадресацию с контроллера.

Код (упрощенный, он работает):

 Controller method: // Validate the incoming user $v = new SteamValidation( $steam64Id ); // Check whether they're the first user $v->checkFirstTimeUser(); 

Это уходит в мой класс SteamValidation (приложение / Acme / Steam / SteamValidation.php и namespaced), и он выполняет проверку:

 public function checkFirstTimeUser() { // Is there any users? if( \User::count() == 0 ) { $user_data = [ // Data ]; // Create the new user $newUser = \User::create( $user_data ); // Log that user in \Auth::login($newUser); // Redirect to specific page return \Redirect::route('settings'); } return; } 

Теперь, если счетчик больше 0, он просто возвращается обратно к контроллеру, и я счастливо продолжаю. Однако, если это новый пользователь, и я пытаюсь сделать перенаправление ( return \Redirect::route('settings'); ) Я получаю пустую страницу!

Поэтому мои вопросы:

  • Почему я не могу перенаправить сюда?
  • Каким будет правильный способ вернуть ответ на контроллер, а затем сделать перенаправление?

Причина, по которой вы не можете перенаправить из своего вложенного метода, состоит в том, что просто вызов Redirect :: route () не вызывает перенаправление. Метод вашего контроллера вернет то, что Laravel затем решит, что делать – если это будет просмотр, он отобразит его, если это перенаправление, он сделает перенаправление. В вашем вложенном методе вы можете вернуть то, что хотите, но так долго на контроллере он не проходит, что вниз по линии, тогда это не хорошо для вас.

Также вы, вероятно, не должны возвращать Redirect в вспомогательной функции. Если ваша функция validate имеет логический ответ (да, все хорошо, ничего плохого), тогда вы можете просто вернуть true / false, а затем выбрать это в контроллере для выполнения перенаправления:

 // Validate the incoming user $v = new SteamValidation( $steam64Id ); // Check whether they're the first user if ($v->isFirstTimeUser()) { // note I renamed this method, see below return \Redirect::route('settings'); } 

Однако, хотя мы берем на себя ответственность за перенаправление от вашего метода проверки, вы также должны нести ответственность за создание пользователя:

 // SteamValidation public function isFirstTimeUser() { return (\User::count() == 0); } // Controller // Validate the incoming user $v = new SteamValidation( $steam64Id ); // Check whether they're the first user if ($v->isFirstTimeUser()) { // you may even wish to extract this user creation code out to something like a repository if you wanna go for it $user_data = [ // Data ]; // Create the new user $newUser = \User::create( $user_data ); // Log that user in \Auth::login($newUser); // Redirect to specific page return \Redirect::route('settings'); }