Шаблон макета Laravel потерян в лезвии URL подпапки

Моя колонка макета шаблона не отображается, когда URL-адрес является вложенной папкой.

Я сделал тестовый пример для проверки:

URL/тесты в порядке

но

URL/tests/1/edit теряет внешний шаблон макета и отображает только содержимое.

Тестовый контроллер:

class TestController extends AdminController {

 protected $layout = 'layouts.admin';

public function index()
{
    // load the view
    $this->layout->content=View::make('tests.index');

}
public function edit($id)
{
    //
    $course=Course::find($id);

    return View::make('tests.edit')->with(array('course'=>$course));
}

}

макет admin.blade.php

<html><body>
{{ $content }}
</body>
</html>

тесты/index.blade.php

hello

/tests отображает исходный HTML-код с полным макетом и отлично работает на соответствующих примерах сайтов.

тесты/edit.blade.php

edit

/tests/1/редактировать рендеры без разметки HTML

Существуют различные способы использования блейда, но я подумал, что проще всего использовать защищенную компоновку, но, похоже, есть проблемы?

Любая помощь приветствуется.


person martyn    schedule 16.03.2014    source источник


Ответы (2)


В методе редактирования вместо

return View::make('tests.edit')->with(array('course'=>$course));

использовать:

$this->layout->content= View::make('tests.edit')->with(array('course'=>$course));
person marcanuy    schedule 16.03.2014
comment
Спасибо. Глупая ошибка! - person martyn; 16.03.2014

В вашем AdminController, который является базовым контроллером вашего TestController, добавьте настройки макета, поместите этот код в свой AdminController

protected $layout = 'layouts.master';

protected function setupLayout()
{
    if ( ! is_null($this->layout))
    {
        $this->layout = View::make($this->layout);
    }
}

Теперь вы используете любое представление с макетом, используя что-то вроде этого:

$this->layout->content = View::make('tests.edit')->with(array('course'=>$course));

Здесь tests.edit означает, что файл edit.blade.php (также может быть edit.php, если не блейд) находится в каталоге app/views/tests/.

В вашем методе index вы использовали:

$this->layout->content=View::make('tests.index');

Таким образом, layout появился, потому что вы установили данные в макет, но в другом примере вы не установили данные в layout, поэтому макет не отображается, он возвращает только представление, как показано ниже:

return View::make('tests.edit')->with(array('course'=>$course));

Итак, настройте макет в классе базового контроллера, чтобы в каждом контроллере вам не нужно было настраивать макет, но всегда устанавливайте данные в переменную content макета, используя это:

$this->layout->content = 'your data';
person The Alpha    schedule 16.03.2014