2017-12-16 19 views
2

확장하고 싶은 2 개의 레이아웃 파일이 있습니다. 여기 Laravel 블레이드가 확장 내에서 확장됩니다.

<div class="container h-100"> 
    <div class="row h-100 justify-content-center align-items-center"> 
     <div class="col-6"> 
      <div class="card"> 
       <div class="card-body"> 
        @yield('content') 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

은 내 양식 코드 :

@section('content') 
    <form method="POST" action="{{ route('login') }}" novalidate> 
     {{ csrf_field() }} 

     <div class="form-group"> 
      <label for="email">Email</label> 
      <input type="email" name="email" id="email" class="form-control"> 
     </div> 

     <div class="form-group"> 
      <label for="password">Password</label> 
      <input type="password" name="password" id="password" class="form-control"> 
     </div> 

     <div class="form-check"> 
      <label class="form-check-label"> 
       <input type="checkbox" name="remember" class="form-check-input"> 
       Remember 
      </label> 
     </div> 

     <button type="submit" class="btn btn-primary">Login</button> 
     <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a> 
    </form> 
@endsection 

내가 알고

<!DOCTYPE html> 
<html lang="{{ app()->getLocale() }}"> 
<head> 
    <!-- Meta --> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <meta name="csrf-token" content="{{ csrf_token() }}"> 

    <title>@yield('title') | {{ config('app.name') }}</title> 

    <!-- Styles --> 
    <link rel="stylesheet" href="{{ asset('laraback/css/bootstrap.min.css') }}"> 
    <link rel="stylesheet" href="{{ asset('laraback/css/fontawesome.min.css') }}"> 
    <link rel="stylesheet" href="{{ asset('laraback/css/datatables.min.css') }}"> 
</head> 
<body> 

@yield('content') 

<!-- Scripts --> 
<script src="{{ asset('laraback/js/jquery.min.js') }}"></script> 
<script src="{{ asset('laraback/js/popper.min.js') }}"></script> 
<script src="{{ asset('laraback/js/bootstrap.min.js') }}"></script> 
@stack('scripts') 

</body> 
</html> 

form.blade.php 내가 사용하려는 아이의 레이아웃입니다 :

app.blade.php

메인 레이아웃입니다 @extends('layouts.app')을 사용하여 기본 레이아웃에서 양식을 얻을 수 있지만 어떻게 만들 수 있습니까? 그래서 form.blade.php 안에 app.blade.php을 확장 할 수 있습니까? (나는이 소리가 혼란 스럽다는 것을 알고있다).

내가 원하는 결과의 예는 다음과 같습니다 app.blade.php에서

<!DOCTYPE html> 
<html lang="{{ app()->getLocale() }}"> 
<head> 
    <!-- Meta --> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <meta name="csrf-token" content="{{ csrf_token() }}"> 

    <title>@yield('title') | {{ config('app.name') }}</title> 

    <!-- Styles --> 
    <link rel="stylesheet" href="{{ asset('laraback/css/bootstrap.min.css') }}"> 
    <link rel="stylesheet" href="{{ asset('laraback/css/fontawesome.min.css') }}"> 
    <link rel="stylesheet" href="{{ asset('laraback/css/datatables.min.css') }}"> 
</head> 
<body> 

<div class="container h-100"> 
    <div class="row h-100 justify-content-center align-items-center"> 
     <div class="col-6"> 
      <div class="card"> 
       <div class="card-body"> 
        <form method="POST" action="{{ route('login') }}" novalidate> 
         {{ csrf_field() }} 

         <div class="form-group"> 
          <label for="email">Email</label> 
          <input type="email" name="email" id="email" class="form-control"> 
         </div> 

         <div class="form-group"> 
          <label for="password">Password</label> 
          <input type="password" name="password" id="password" class="form-control"> 
         </div> 

         <div class="form-check"> 
          <label class="form-check-label"> 
           <input type="checkbox" name="remember" class="form-check-input"> 
           Remember 
          </label> 
         </div> 

         <button type="submit" class="btn btn-primary">Login</button> 
         <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

<!-- Scripts --> 
<script src="{{ asset('laraback/js/jquery.min.js') }}"></script> 
<script src="{{ asset('laraback/js/popper.min.js') }}"></script> 
<script src="{{ asset('laraback/js/bootstrap.min.js') }}"></script> 
@stack('scripts') 

</body> 
</html> 

답변

0

당신은 당신의 코드처럼 ('내용') @yield 사용할 수 있습니다. app.blade.php가 완벽합니다.

form.blade.php에서 다음과 같이 수정하십시오.

@extends('layouts.app') 
@section('content') 
<div class="container h-100"> 
    <div class="row h-100 justify-content-center align-items-center"> 
     <div class="col-6"> 
      <div class="card"> 
       <div class="card-body"> 
        @include('form_content') 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

@endsection 

그리고 @section 및 @endsection을 사용하지 않고 양식 내용으로 form_content.blade.php 파일을 만들어야합니다.

<form method="POST" action="{{ route('login') }}" novalidate> 
    {{ csrf_field() }} 

    <div class="form-group"> 
     <label for="email">Email</label> 
     <input type="email" name="email" id="email" class="form-control"> 
    </div> 

    <div class="form-group"> 
     <label for="password">Password</label> 
     <input type="password" name="password" id="password" class="form-control"> 
    </div> 

    <div class="form-check"> 
     <label class="form-check-label"> 
      <input type="checkbox" name="remember" class="form-check-input"> 
      Remember 
     </label> 
    </div> 

    <button type="submit" class="btn btn-primary">Login</button> 
    <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a> 
</form> 

그런 다음 결과 페이지를 원하는대로 볼 수 있습니다.

@if를 사용하여 @include 절을 분류 할 수 있습니다. 모든 @include에 대해 조건절을 만들 수 있음을 의미합니다. 조건이 맞으면 @include 섹션 중 하나를 포함 할 수 있습니다.

+0

이 솔루션을 사용하면 동일한 양식을 표시하기 위해 2 개의 다른 파일을 만들어야합니다. – kjdion84

+0

2 개의 다른 파일을 의미합니까? – HiKangg

+0

'@ include '가 매번 달라지기 때문에 자식 레이아웃에 사용할 각 폼에 대해 별도의 form.blade.php 파일을 만들어야합니다. – kjdion84