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
- News.php
resources
views
admin
- news_create.blade.php
- news.blade.php
- news_detail.blade.php
- news_update.blade.php
routes
- 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é.
Laravel - delete