Laravel — публичный макет не нужен для каждой функции

StackOverflow https://stackoverflow.com//questions/12660201

  •  11-12-2019
  •  | 
  •  

Вопрос

Я только недавно начал работать с Laravel.Отличный фреймворк на данный момент!Однако у меня есть вопрос.

Я использую такой шаблон макета:public $layout = 'layouts.private';

Это установлено в моем Base_Controller:

public function __construct(){

    //Styles
    Asset::add('reset', 'css/reset.css');
    Asset::add('main', 'css/main.css');

    //Scripts
    Asset::add('jQuery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js');

    //Switch layout template according to the users auth credentials.
    if (Auth::check()) {
        $this -> layout = 'layouts.private';
    } else {
        $this -> layout = 'layouts.public';
    }

    parent::__construct();

}

Однако теперь я получаю исключение ошибки, когда пытаюсь получить доступ к функциям в разных контроллерах, которые не должны вызывать какое-либо представление, т.е.когда пользователь собирается войти в систему:

class Login_Controller extends Base_Controller {

public $restful = true;

public function post_index()
{

    $user = new User();
    $credentials = array('username' => Input::get('email'), 'password' => Input::get('password'));

    if (Auth::attempt($credentials))
    {

    } else {

    }

}

}

Ошибка, которую я получаю, заключается в том, что я не устанавливаю содержимое различных переменных в своем общедоступном макете $.Но поскольку в этой функции представление не требуется, как мне сказать Laravel, чтобы он не включал макет в эту функцию?

Лучшее решение, с которым я сам столкнулся (не знаю, плохой ли это путь?), — это unset($this -> layout); из функции post_index()...

Подводя итог моему вопросу:как мне сказать Laravel не включать public $layout в определенных функциях, где представление не требуется?

Заранее спасибо, Фишер

Это было полезно?

Решение

Вам нужно установить $this->layout = null для любой функции, которую вы не хотите отображать.

Другие советы

Если представление не требуется, это должно быть перенаправление.Что еще происходит в вашем методе входа в систему?

Вам следует показать форму входа на странице входа GET.Эта страница отправляет сообщения на страницу входа POST, где вы выполняете проверку и аутентификацию.Независимо от того, что происходит на уровне аутентификации, пользователь должен быть перенаправлен обратно на запрос GET, где будет отображено другое представление.Это будет либо снова форма входа в систему, если им это не удалось, либо их панель управления/домашняя страница.

Это шаблон веб-разработки под названием Опубликовать/Перенаправить/Получить и должны применяться в большинстве случаев.Я не могу придумать случая, когда бы вы это применили.

В этом вашем методе представление не требуется, но вы все равно должны перенаправляться как таковое.

return Redirect::to('wherever');

Помните, что вы должны возвращаться перенаправление или Laravel предположат, что вы хотите использовать свой макет в качестве ответа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top