Я пытаюсь использовать "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="/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="/jquery-1.11.0.min.js"></script>
<script src="/bootstrap.min.js"></script>
</body>
Я знаю, что я не использую метод "nest()", так как Laravel по-прежнему новичок для меня. Любая помощь приветствуется!
Вы можете использовать макеты двумя основными способами в 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
в вашем макете.