12/08/2018, 14:36

CURD với Repository trong Laravel 5 (Part2)

Trong bài trước mình đã giới thiệu về Repository và có demo phần create, view list và show user bằng Laravel 5.3, các bạn có thể xem lại tại đây. Hôm nay mình xin demo tiếp phần update và delete ứng dụng Repository. Ok! Bắt đầu nào! Đầu tiên là update user, chúng ta tiến hành tạo phần view trước ...

Trong bài trước mình đã giới thiệu về Repository và có demo phần create, view list và show user bằng Laravel 5.3, các bạn có thể xem lại tại đây. Hôm nay mình xin demo tiếp phần update và delete ứng dụng Repository. Ok! Bắt đầu nào!

Đầu tiên là update user, chúng ta tiến hành tạo phần view trước nhé. Chúng ta có file edit.blade.php như sau:

    {!! Form::open(['action' => ['UsersController@update', $user->id], 'method' => 'PUT']) !!}
        <div class="form-group">
           {!! Form::label('name', Name, ['class' => 'col-sm-2 control-label']) !!}
           <div class="col-sm-10">
               {!! Form::text('name', $user->name, ['class' => 'form-control']) !!}
           </div>
       </div>
       <div class="form-group">
           {!! Form::label('email', Email, ['class' => 'col-sm-2 control-label']) !!}
           <div class="col-sm-10">
                {!! Form::email('email', $user->email, ['class' => 'form-control']) !!}
           </div>
        </div>
        <div class="form-group">
           <div class="col-sm-offset-2 col-sm-10">
                {!! Form::submit(Update, ['class' => 'btn btn-success']) !!}
                {!! Form::reset(Reset, ['class' => 'btn btn-default']) !!}
           </div>
        </div>
    {!! Form::close() !!}

Trong UsersController.php ta có thể viết như sau:

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        $user = $this->repository->find($id);

        return view('users.edit', compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        $user = $this->repository->find($id);

        try {
            $dataUpdate = $request->only('name', 'email');
            $result = $this->repository->update($dataUpdate, $id);

            if ($result) {
                return redirect()->action('UsersController@edit', ['id' => $id])
                    ->with('status', 'Successfull!');
            }
        } catch (Exception $e) {
            Log::error($e);

            return back()->withErrors('Update failed!');
        }
    }

Ở function update trên mình dùng Request mặc định của Laravel, các bạn có thể tự tạo một request riêng, ví dụ có tên là UpdateUserRequest để Validate dữ liệu như sau:

<?php

namespace AppHttpRequests;

use IlluminateFoundationHttpFormRequest;

class UpdateUserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|max:60',
            'email' => 'email|required|max:60',
        ];
    }
}

Và chỉnh lại function update như sau:

/**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(UpdateUserRequest $request, $id)
    {
        $user = $this->repository->find($id);

        try {
            $dataUpdate = $request->only('name', 'email');
            $result = $this->repository->update($dataUpdate, $id);

            if ($result) {
                return redirect()->action('UsersController@edit', ['id' => $id])
                    ->with('status', 'Successfull!');
            }
        } catch (Exception $e) {
            Log::error($e);

            return back()->withErrors('Update failed!');
        }
    }

Nhớ có dòng này nhé =)) use AppHttpRequestsUpdateUserRequest Vậy là xong phần update             </div>
            
            <div class=

0