기사 편집을 처리해야 합니다. 물론 다음과 같이 수동으로 새 경로를 추가할 수도 있습니다.
<code>Route::get('/articles/{id}/edit', 'ArticleController@edit');</code>
명령줄에서 artisan
중 route:list
을 사용하여 현재 경로를 살펴보겠습니다.
<code>php artisan route:list</code>
RESTful 준수의 경우 laravel의 resource
경로를 직접 사용하는 것이 좋은 선택일 수 있습니다. 그러나 모든 경로를 제거하고
<code>Route::resource('articles', 'ArticlesController');</code>
<code>php artisan route:list</code>을 다시 사용하여 경로를 확인하세요. 와, 기대에 맞는 경로가 많이 생성되었습니다. 각 항목을 주의 깊게 살펴보세요.
이제 컨트롤러에 메소드를 추가하세요:
<code> public function edit($id) { $article = Article::findOrFail($id); return view('articles.edit', compact('article')); }</code>
지금 뷰 만들기
<code>@extends('layout') @section('content') <h1>Edit: {!! $article->title !!} </h1> <hr/> ...</code>
알겠습니다. 이 코드는 모두 create.blade.php
에서 복사하여 수정한 것입니다. 문제는 이를 반복해야 합니까? 이 문제는 나중에 다루겠습니다. 이제 양식 제출 문제를 살펴보겠습니다. 라우팅 <code>php artisan route:list</code>에서 다시 살펴보세요. 수정은 PATCH
메서드를 사용합니다. 뷰를 수정해 보겠습니다.
<code>{!! Form::open(['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!} </code>
브라우저에서 /articles/1/edit
을 방문하여 소스 코드를 확인하면 laravel이 _method=PATCH
의 숨겨진 필드를 자동으로 생성하는 것을 확인할 수 있습니다.
기사를 편집했는데 기사 정보가 표시되지 않는 문제가 있습니다.
<code> {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}</code>
좋아요. 모든 것이 정상입니다. 단, published_on
필드가 여전히 현재 날짜로 설정되어 있다는 점만 빼면 나중에 다루겠습니다.
이제 컨트롤러에 메소드를 추가하세요:
<code> public function update($id, \Illuminate\Http\Request $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>
수정 프로세스 중에도 확인해야 합니다. 요청 클래스를 재사용하고 CreateArticleRequest
의 이름을 보다 일반적인 ArticleRequest
으로 바꾸겠습니다. store
메서드에서 매개변수를 수정하는 것을 잊지 마세요.
<code> public function update($id, Requests\ArticleRequest $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>
이제 남은 문제는 새 코드와 편집 코드가 오류 표시 등 대부분 동일한 코드를 사용하지만 복사본이 두 개 있다는 점입니다. 이 문제를 해결해 보겠습니다.
views/articles
바로 아래에 새 파일 list.blade.php
을 만들고 create.blade.php
에서 오류 처리 코드를 복사합니다.
<code>@if ($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif</code>
create.blade.php
에서 오류 처리 코드를 다음 명령문으로 바꾸세요.
<code>@include('articles.list')</code>
양식 코드를 다시 다루겠습니다. form
제출 버튼이 다른 점을 제외하면 양식 코드는 거의 동일합니다. 뷰를 생성하고 articles/form_partial.blade.php
코드를 복사합니다
<code><div class="form-group"> {!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('body', 'Body:') !!} {!! Form::textarea('body', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('published_at', 'Publish On:') !!} {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!} </div> <div class="form-group"> {{--这里要设置变量,依据是编辑还是修改来改变,当然也可以不放置在partial中--}} {!! Form::submit($submitButtonText, ['class' => 'btn btn-primary form-control']) !!} </div></code>
수정create.blade.php
<code>@extends('layout') @section('content') <h1>Write a New Article</h1> <hr/> @include('articles.list') {{--使用我们添加的 illuminate\html 开源库--}} {!! Form::open(['url' => 'articles']) !!} @include('articles.form_partial', ['submitButtonText' => 'Add Article']) {!! Form::close() !!} @stop</code>
수정edit.blade.php
<code>@extends('layout') @section('content') <h1>Edit: {!! $article->title !!} </h1> <hr/> @include('articles.list') {{--使用我们添加的 illuminate\html 开源库--}} {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!} @include('articles.form_partial', ['submitButtonText' => 'Update Article']) {!! Form::close() !!} @stop</code>
이상에서는 Laravel 5(11)의 기본 사항인 Subview 및 양식 재사용에 대한 내용을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.