Laravel PHP: возникли проблемы при использовании nest ()

0

Я пытаюсь использовать "nest()" в Laravel PHP, используя 2 вида, 1) макет (layouts\master.blade.php) и 2) форму (формы\new-video.php).

Однако, когда я использую функцию "nest()", все, что я вижу, это выход из "master.blade.php", а не форма из "forms.new-video.blade.php".

контроллер:

class VideosController extends BaseController {

/**
 * The video model
 *
 * @var \Models\Video
 **/
protected $video;


//  Use this variable for the repository

protected $videoRepo;

protected $layout = 'layouts.master';

  public function create()
  {
    $data = array('type' => 'video');
    $this->layout->content = \View::make('forms.new-video', $data)
        ->nest('form', 'forms.new-video');
  }
}

EDIT: Вот мой макет "master.blade.php" (шаблон):

<!doctype html>
<html>
<head>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href=" <?php echo asset('css/style.css')?>" type="text/css">
    <style type="text/css">
        form ul {list-style: none}
        .navbar {border-radius: 0px;}
    </style>
</head>

<body>
    <nav class="navbar navbar-inverse" role="navigation">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="#">Pictures and Videos</a>
            </div>
            <div class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
                    <li {{ (Request::is('pics_vids') ? 'class="active"' : '') }}>{{ link_to_route('overview', 'Home') }}</li>
                    <li {{ (Request::is('pics_vids') ? 'class="active"' : '') }}>{{ link_to_route('overview', 'Home') }}</li>
                    <li {{ (Request::is('pics_vids/new_video') ? 'class="active"' : '') }}>{{ link_to_route('new_video', 'New Video') }}</li>
                </ul>
            </div>
        </div>
    </nav>

/* Content is being called in my 'container' <div> */

    <div class="container">
        @if (Session::has('message'))
            <div class="flash alert">
                <p>{{ Session::get('message') }}</p>
            </div>
        @endif

/* Call up the content here  */

        @yield('content')
    </div>

    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
</body>

Я знаю, что я не использую метод "nest()", так как Laravel по-прежнему новичок для меня. Любая помощь приветствуется!

Теги:
laravel-4

1 ответ

2
Лучший ответ

Вы можете использовать макеты двумя основными способами в Laravel:

1. Шаблоны контроллеров

В вашем контроллере у вас есть:

$this->layout->content = \View::make('forms.new-video', $data);

В вашем master.blade.php вас есть это место, где вы хотите разместить контент:

{{ $content }} // When using controller templates you don't use @yield

И в вашем new-video вы имеете любой HTML-код, который вам нужен.

2. Наследование шаблонов

Контроллер не должен расширять BaseController чтобы это работало. И в вашем действии вы возвращаете представление, не назначая его, например:

return \View::make('forms.new-video', $data);

В вашем master.blade.php вы используете @yield где хотите включить свой контент:

@yield('content');

В представлении new-video вам нужно указать, что представление @extents ваш макет и определяет раздел с content которое будет включено в ваш макет:

@extends('layouts.master')

@section('content')
    // Your form html goes here
@stop

В вашем случае вы можете просто использовать $this->layout->content = \View::make('forms.new-video', $data); в вашем контроллере и {{ $content }} вместо @yield в вашем макете.

  • 0
    Я попытался сделать это, но когда я нажимаю на ссылку «Новое видео», на веб-странице все еще просто отображается макет «master.blade.php» и контейнер, который должен содержать мою форму с «new-video.blade». php ', все еще пусто.
  • 0
    Это должно работать. Пожалуйста, опубликуйте свои файлы шаблонов, чтобы я мог посмотреть.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню