>  기사  >  백엔드 개발  >  Laravel 5 기본 사항(11) - 하위 뷰 및 양식 재사용

Laravel 5 기본 사항(11) - 하위 뷰 및 양식 재사용

WBOY
WBOY원래의
2016-08-08 09:26:41949검색

기사 편집을 처리해야 합니다. 물론 다음과 같이 수동으로 새 경로를 추가할 수도 있습니다.

<code>Route::get('/articles/{id}/edit', 'ArticleController@edit');</code>

명령줄에서 artisanroute: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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.