지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |
17817 단어 LaraDocktemplatelaravel5.6PHP7블레이드
Laravel은 Blade라는 템플릿 기능을 제공합니다.
그것을 사용한 간단한 구현은 Udemy의 온라인 자료
【2일로 할 수 있는】처음 PHP 7 x Laravel 5.5 입문 에서 배웠지만 Laravel5.5에서 구현되었습니다.
블레이드를 사용하여 컴포넌트 지향 뷰로 만들기
제 환경은 Laravel5.6이므로, 좀 더 나우한 구현에 임하기로 했습니다.
JS 프레임워크로 친숙한 컴포넌트 지향적인 구현으로 바꾸어 보았습니다.
Component의 작성의 기본
Laravel 공식 사이트 | 컴포넌트 사용법
Laravel 5.5와 5.6에서 구성 요소를 작성하는 방법의 차이점
Laravel 5.5에서는 이런 느낌이었습니다.
Laravel5.5의 Component 호출@component('component.alert', ['foo', $foo])
・・・・・
@endcomponent
Laravel5.6에서는, 보다 간결하고 직관적인 호출이 가능하게 되어 있어, 이번은 그 기술 방법을 채용했습니다.
Laravel5.6의 Component 호출@alert(['foo', $foo])
・・・・・
@endalert
구현
우선 레이아웃과 컴포넌트를 분리
app/view/layouts/books.blade.php(레이아웃용 템플릿)@extends('layouts.app')
@section('pageCss')
<link href="{{ asset('css/layouts/book.css') }}" rel="stylesheet">
@endsection
@section('content')
<div class="container" >
<div class="card-columns">
// 本の新規登録コンポーネント
@newBook
@endnewBook
// 本の一覧表示コンポーネント(パラメータとして$books変数を渡す)
@bookList(['books' => $books])
@endbookList
</div>
</div>
@endsection
app/Http/Controllers/BookController.php・・・・・・
public function index()
{
// layoutsディレクトリにBookのテンプレートを移動したので、返却するビューにディレクトリ名を付けるよう変更
- return view('ooks', ['books' => $this->bookService::getBooks()]);
+ return view('layouts.books', ['books' => $this->bookService::getBooks()]);
}
・・・・・・
app/providers/AppServiceProvider.php /**
* Register any application services.
*
* @return void
*/
public function register()
{
+ // Bladeコンポーネントを使えるようにプロバイダー登録
+ $this->registerComponents();
}
+ /**
+ * Register Blade components.
+ *
+ * @return void
+ */
+ private function registerComponents(): void {
+ Blade::component('components.new-book', 'newBook');
+ Blade::component('components.book-list', 'bookList');
+ }
app/view/components/new-book.blade.php(책의 신규 등록 컴포넌트)<div class="card">
<div class="card-header">
{{ __('新規書籍の登録') }}
</div>
<div class="card-body">
<!-- Display Validation Errors -->
@include('common.errors')
<!-- New Book Form -->
<form action="/books" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Book Name -->
<div class="form-group">
<label for="task-name" class="col-sm-3 control-label">{{ __('書籍名') }}</label>
<div class="col-sm-6">
<input type="text" name="name" id="book-name" class="form-control" value="{{ old('book') }}">
</div>
</div>
<!-- Add Book Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary">
<i class="fa fa-plus"></i>{{ __('追加') }}
</button>
</div>
</div>
</form>
</div>
</div>
app/view/components/book-list.blade.php (책 목록 구성 요소)@if (count( $books ) > 0)
<div class="card">
<div class="card-header">
{{ __('書籍一覧') }}
</div>
<div class="card-body">
<table class="table table-striped task-table">
<thead>
<th>{{ __('書籍名') }}</th>
<th> </th>
</thead>
<tbody>
@foreach ($books as $book)
<tr>
<td class="table-text"><div>{{ $book->title }}</div></td>
<!-- Task Delete Button -->
<td>
<form action="/books/{{ $book->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit" class="btn btn-danger">
<i class="fa fa-trash"></i>{{ __('削除') }}
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endif
화면 표시 가능
책 레이아웃 안에
・상부가 신규 등록 컴포넌트로 표시
・하부가 일람 표시 컴퍼넌트로 표시
도중 곤란한 일
리스트 컴퍼넌트에 건네준 파라미터의\$books입니다만, 최초는 book-list.blade.php측에서
{{$books}}로 작성했지만 잘 인식되지 않고 오류가 계속되었습니다.
호출자의 레이아웃 측에서 매개 변수를 전달할 때
@bookList(['books' => 'books'])
@endbookList
했던 것이 원인이었습니다. 변수로서가 아니라 문자열로 전달했다. . .
이것을
@bookList(['books' => $books])
@endbookList
로, 컴퍼넌트의 템플릿 측은, 보통으로 $books로서 기술하는 일로 제대로 배열로서
컴퍼넌트에 파라미터를 건네줄 수 있어 움직이게 되었습니다.
컴포넌트마다 CSS를 준비하고 분리할 수 있으면 좋겠습니다만, 뭔가 방법 있나요?
이번 수정 내역
집 서버에서 공개한 제작중 앱
책 목록
공부로 만드는 프로젝트 소스
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Laravel 공식 사이트 | 컴포넌트 사용법
Laravel 5.5와 5.6에서 구성 요소를 작성하는 방법의 차이점
Laravel 5.5에서는 이런 느낌이었습니다.
Laravel5.5의 Component 호출@component('component.alert', ['foo', $foo])
・・・・・
@endcomponent
Laravel5.6에서는, 보다 간결하고 직관적인 호출이 가능하게 되어 있어, 이번은 그 기술 방법을 채용했습니다.
Laravel5.6의 Component 호출@alert(['foo', $foo])
・・・・・
@endalert
구현
우선 레이아웃과 컴포넌트를 분리
app/view/layouts/books.blade.php(레이아웃용 템플릿)@extends('layouts.app')
@section('pageCss')
<link href="{{ asset('css/layouts/book.css') }}" rel="stylesheet">
@endsection
@section('content')
<div class="container" >
<div class="card-columns">
// 本の新規登録コンポーネント
@newBook
@endnewBook
// 本の一覧表示コンポーネント(パラメータとして$books変数を渡す)
@bookList(['books' => $books])
@endbookList
</div>
</div>
@endsection
app/Http/Controllers/BookController.php・・・・・・
public function index()
{
// layoutsディレクトリにBookのテンプレートを移動したので、返却するビューにディレクトリ名を付けるよう変更
- return view('ooks', ['books' => $this->bookService::getBooks()]);
+ return view('layouts.books', ['books' => $this->bookService::getBooks()]);
}
・・・・・・
app/providers/AppServiceProvider.php /**
* Register any application services.
*
* @return void
*/
public function register()
{
+ // Bladeコンポーネントを使えるようにプロバイダー登録
+ $this->registerComponents();
}
+ /**
+ * Register Blade components.
+ *
+ * @return void
+ */
+ private function registerComponents(): void {
+ Blade::component('components.new-book', 'newBook');
+ Blade::component('components.book-list', 'bookList');
+ }
app/view/components/new-book.blade.php(책의 신규 등록 컴포넌트)<div class="card">
<div class="card-header">
{{ __('新規書籍の登録') }}
</div>
<div class="card-body">
<!-- Display Validation Errors -->
@include('common.errors')
<!-- New Book Form -->
<form action="/books" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Book Name -->
<div class="form-group">
<label for="task-name" class="col-sm-3 control-label">{{ __('書籍名') }}</label>
<div class="col-sm-6">
<input type="text" name="name" id="book-name" class="form-control" value="{{ old('book') }}">
</div>
</div>
<!-- Add Book Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary">
<i class="fa fa-plus"></i>{{ __('追加') }}
</button>
</div>
</div>
</form>
</div>
</div>
app/view/components/book-list.blade.php (책 목록 구성 요소)@if (count( $books ) > 0)
<div class="card">
<div class="card-header">
{{ __('書籍一覧') }}
</div>
<div class="card-body">
<table class="table table-striped task-table">
<thead>
<th>{{ __('書籍名') }}</th>
<th> </th>
</thead>
<tbody>
@foreach ($books as $book)
<tr>
<td class="table-text"><div>{{ $book->title }}</div></td>
<!-- Task Delete Button -->
<td>
<form action="/books/{{ $book->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit" class="btn btn-danger">
<i class="fa fa-trash"></i>{{ __('削除') }}
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endif
화면 표시 가능
책 레이아웃 안에
・상부가 신규 등록 컴포넌트로 표시
・하부가 일람 표시 컴퍼넌트로 표시
도중 곤란한 일
리스트 컴퍼넌트에 건네준 파라미터의\$books입니다만, 최초는 book-list.blade.php측에서
{{$books}}로 작성했지만 잘 인식되지 않고 오류가 계속되었습니다.
호출자의 레이아웃 측에서 매개 변수를 전달할 때
@bookList(['books' => 'books'])
@endbookList
했던 것이 원인이었습니다. 변수로서가 아니라 문자열로 전달했다. . .
이것을
@bookList(['books' => $books])
@endbookList
로, 컴퍼넌트의 템플릿 측은, 보통으로 $books로서 기술하는 일로 제대로 배열로서
컴퍼넌트에 파라미터를 건네줄 수 있어 움직이게 되었습니다.
컴포넌트마다 CSS를 준비하고 분리할 수 있으면 좋겠습니다만, 뭔가 방법 있나요?
이번 수정 내역
집 서버에서 공개한 제작중 앱
책 목록
공부로 만드는 프로젝트 소스
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@component('component.alert', ['foo', $foo])
・・・・・
@endcomponent
@alert(['foo', $foo])
・・・・・
@endalert
우선 레이아웃과 컴포넌트를 분리
app/view/layouts/books.blade.php(레이아웃용 템플릿)
@extends('layouts.app')
@section('pageCss')
<link href="{{ asset('css/layouts/book.css') }}" rel="stylesheet">
@endsection
@section('content')
<div class="container" >
<div class="card-columns">
// 本の新規登録コンポーネント
@newBook
@endnewBook
// 本の一覧表示コンポーネント(パラメータとして$books変数を渡す)
@bookList(['books' => $books])
@endbookList
</div>
</div>
@endsection
app/Http/Controllers/BookController.php
・・・・・・
public function index()
{
// layoutsディレクトリにBookのテンプレートを移動したので、返却するビューにディレクトリ名を付けるよう変更
- return view('ooks', ['books' => $this->bookService::getBooks()]);
+ return view('layouts.books', ['books' => $this->bookService::getBooks()]);
}
・・・・・・
app/providers/AppServiceProvider.php
/**
* Register any application services.
*
* @return void
*/
public function register()
{
+ // Bladeコンポーネントを使えるようにプロバイダー登録
+ $this->registerComponents();
}
+ /**
+ * Register Blade components.
+ *
+ * @return void
+ */
+ private function registerComponents(): void {
+ Blade::component('components.new-book', 'newBook');
+ Blade::component('components.book-list', 'bookList');
+ }
app/view/components/new-book.blade.php(책의 신규 등록 컴포넌트)
<div class="card">
<div class="card-header">
{{ __('新規書籍の登録') }}
</div>
<div class="card-body">
<!-- Display Validation Errors -->
@include('common.errors')
<!-- New Book Form -->
<form action="/books" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Book Name -->
<div class="form-group">
<label for="task-name" class="col-sm-3 control-label">{{ __('書籍名') }}</label>
<div class="col-sm-6">
<input type="text" name="name" id="book-name" class="form-control" value="{{ old('book') }}">
</div>
</div>
<!-- Add Book Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary">
<i class="fa fa-plus"></i>{{ __('追加') }}
</button>
</div>
</div>
</form>
</div>
</div>
app/view/components/book-list.blade.php (책 목록 구성 요소)
@if (count( $books ) > 0)
<div class="card">
<div class="card-header">
{{ __('書籍一覧') }}
</div>
<div class="card-body">
<table class="table table-striped task-table">
<thead>
<th>{{ __('書籍名') }}</th>
<th> </th>
</thead>
<tbody>
@foreach ($books as $book)
<tr>
<td class="table-text"><div>{{ $book->title }}</div></td>
<!-- Task Delete Button -->
<td>
<form action="/books/{{ $book->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit" class="btn btn-danger">
<i class="fa fa-trash"></i>{{ __('削除') }}
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endif
화면 표시 가능
책 레이아웃 안에
・상부가 신규 등록 컴포넌트로 표시
・하부가 일람 표시 컴퍼넌트로 표시
도중 곤란한 일
리스트 컴퍼넌트에 건네준 파라미터의\$books입니다만, 최초는 book-list.blade.php측에서
{{$books}}로 작성했지만 잘 인식되지 않고 오류가 계속되었습니다.
호출자의 레이아웃 측에서 매개 변수를 전달할 때
@bookList(['books' => 'books'])
@endbookList
했던 것이 원인이었습니다. 변수로서가 아니라 문자열로 전달했다. . .
이것을
@bookList(['books' => $books])
@endbookList
로, 컴퍼넌트의 템플릿 측은, 보통으로 $books로서 기술하는 일로 제대로 배열로서
컴퍼넌트에 파라미터를 건네줄 수 있어 움직이게 되었습니다.
컴포넌트마다 CSS를 준비하고 분리할 수 있으면 좋겠습니다만, 뭔가 방법 있나요?
이번 수정 내역
집 서버에서 공개한 제작중 앱
책 목록
공부로 만드는 프로젝트 소스
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
리스트 컴퍼넌트에 건네준 파라미터의\$books입니다만, 최초는 book-list.blade.php측에서
{{$books}}로 작성했지만 잘 인식되지 않고 오류가 계속되었습니다.
호출자의 레이아웃 측에서 매개 변수를 전달할 때
@bookList(['books' => 'books'])
@endbookList
했던 것이 원인이었습니다. 변수로서가 아니라 문자열로 전달했다. . .
이것을
@bookList(['books' => $books])
@endbookList
로, 컴퍼넌트의 템플릿 측은, 보통으로 $books로서 기술하는 일로 제대로 배열로서
컴퍼넌트에 파라미터를 건네줄 수 있어 움직이게 되었습니다.
컴포넌트마다 CSS를 준비하고 분리할 수 있으면 좋겠습니다만, 뭔가 방법 있나요?
이번 수정 내역
집 서버에서 공개한 제작중 앱
책 목록
공부로 만드는 프로젝트 소스
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
책 목록
공부로 만드는 프로젝트 소스
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(지금부터 Web 개발의 백엔드를 배우는 in 2018(PHP7편 - 1.7일째) |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uegaki-masaaki/items/3e781d20777f589f2989텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)