03/08/2019, 11:02

Tổng kết - Laravel

Tổng kết - Laravel Nội dung này sẽ tổng kết lại các bài học về Insert - View - Detail - Update - Delete. Cấu trúc folder của các file được tạo như sau: myproject app Http Controllers Admin AdminNewsController.php News.php resources ...

Tổng kết - Laravel

  • Nội dung này sẽ tổng kết lại các bài học về Insert - View - Detail - Update - Delete.
  • Cấu trúc folder của các file được tạo như sau:
  • myproject

    • app

      • Http

        • Controllers

          • Admin

            • AdminNewsController.php AdminNewsController.php
      • News.php News.php
    • resources

      • views

        • admin

          • news_create.blade.php news_create.blade.php
          • news.blade.php news.blade.php
          • news_detail.blade.php news_detail.blade.php
          • news_update.blade.php news_update.blade.php
    • routes

      • web.php web.php

Nội dung các file

/app/Http/Controllers/Admin/AdminNewsController.php

File Controller chứa các function xử lý: Insert - View - Detail - Update - Delete.

<?php

namespace AppHttpControllersAdmin;

use AppNews;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesDB;

class AdminNewsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        $news = DB::table('news')->select('*');
        $news = $news->get();
        $pageName = 'Tên Trang - News';

        return view('/admin/news', compact('news', 'pageName'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        return view('/admin/news_create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        $news = new News;
        $news->title = $request->title; 
        $news->email = $request->email;
        $news->description = $request->description;

        $news->save();
        return redirect()->action('Admin[email protected]');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        $news = News::where('id', '=', $id)->select('*')->first();
        $des = html_entity_decode($news->description);
        return view('/admin/news_detail', compact('news', 'des'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        $news = News::findOrFail($id);
        $pageName = 'News - Update';
        return view('/admin/news_update', compact('news', 'pageName'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        $news = News::find($id);
        $news->title = $request->title;
        $news->email = $request->email;
        $news->description = $request->description;

        $news->save();
        return redirect()->action('Admin[email protected]');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        $news = News::find($id);

        $news->delete();
        return redirect()->action('Admin[email protected]')->with('success','Dữ liệu xóa thành công.');
    }
}

/app/News.php

Model News dùng để khai báo table news.

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class News extends Model
{
    protected $table='news';
}

/resources/views/admin/news_create.blade.php

Trang view - insert dữ liệu.

<form method="post" action="/admin/news/store">
    @method('PATCH')
    @csrf
    <p>
        <label for="title">Title</label><br>
        <input type="text" name="title" value="">
    </p>

    <p>
        <label for="email">Email</label><br>
        <input type="text" name="email" value="">
    </p>

    <p>
        <label for="description">Description</label><br>
        <textarea cols="20" rows="10" name="description"></textarea>
    </p>

    <p>
        <button type="submit">Submit</button>
    </p>
</form>

/resources/views/admin/news.blade.php

Trang view - hiển thị danh sách dữ liệu.

<h1>{{ $pageName }}</h1>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>Title</th>
            <th>Email</th>
            <th>Tools</th>
        </tr>
    </thead>
    <tbody>
        @foreach($news as $row)
        <tr>
            <td>{{$row->id}}</td>
            <td>{{$row->title}}</td>
            <td>{{$row->email}}</td>
            <td><a href="/admin/news/edit/{{$row->id}}">Edit</a><br>
                <form method="POST" action="/admin/news/delete/{{$row->id}}" onsubmit="return ConfirmDelete( this )">
                    @method('DELETE')
                    @csrf
                    <button type="submit">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach
    </tbody>
</table>

/resources/views/admin/news_detail.blade.php

Trang view - hiển thị chi tiết dữ liệu.

<h1>News</h1>

<h2>{{ $news->title }}</h2>
<p>{{ $news->email }}</p>
<div>{!! $des !!}</div>

/resources/views/admin/news_update.blade.php

Trang view - update dữ liệu.

<h1>{{ $pageName }}</h1>
<form method="post" action="/admin/news/update/{{ $news->id }}">
    @method('PATCH')
    @csrf
    <input type="hidden" name="id" value="{{ $news->id }}">
    <p>
        <label for="title">Title</label><br>
        <input type="text" name="title" value="{{ $news->title }}">
    </p>

    <p>
        <label for="email">Email</label><br>
        <input type="text" name="email" value="{{ $news->email }}">
    </p>

    <p>
        <label for="description">Description</label><br>
        <textarea cols="50" rows="5" name="description">{{ $news->description }}</textarea>
    </p>

    <p>
        <button type="submit">Submit</button>
    </p>
</form>

/routes/web.php

File điều khiển Route.

Route::get('/admin/news/create', 'Admin[email protected]create');
Route::patch('/admin/news/store', 'Admin[email protected]store');
Route::get('/admin/news', 'Admin[email protected]index');
Route::get('/admin/news/{id}', 'Admin[email protected]show');
Route::get('/admin/news/edit/{id}', 'Admin[email protected]edit');
Route::PATCH('/admin/news/update/{id}', 'Admin[email protected]update');
Route::DELETE('/admin/news/delete/{id}', 'Admin[email protected]destroy');

Thông thường các Route có cùng chung một nhóm, sẽ được group lại để dễ quản lý và source code của Route nhìn cũng gọn hơn, Chúng ta có thể viết lại Route như sau:

Route::group(['prefix'=>'/admin'],function(){
    Route::get('news/create', 'Admin[email protected]create');
    Route::PATCH('news/store', 'Admin[email protected]store');
    Route::get('news', 'Admin[email protected]index');
    Route::get('news/{id}', 'Admin[email protected]show');
    Route::get('news/edit/{id}', 'Admin[email protected]edit');
    Route::PATCH('news/update/{id}', 'Admin[email protected]update');
    Route::DELETE('news/delete/{id}', 'Admin[email protected]destroy');
});

Nội dung bài học Insert - View - Detail - Update - Delete, chúng ta chỉ chú trọng cách trình bày sao cho người học hiểu rõ cách hoạt động ra sao, đã bỏ qua một vài thao tác cần thiết khác: validate form, middleware cho trang Admin, các bạn có thể xem lại 2 phần học validate form và middleware để bổ sung thêm nhé.

0