CRUD Application ب laravel & mongodb الجزء الثاني
imadbelasri
Laravel
LA
فهاد الجزء الثاني من CRUD Application ب laravel & mongodb غادي نشوفوا كيفاش نعرضوا les posts ديالنا فالصفحة الرئيسية ديالنا منبعد غادي نشوفوا كيفاش نزيدو نعدلو أو نحذفوا post لي بغينا.
نظرة سريعة بالفيديو
1- إضافة ل CONTROLLER POSTSCONTROLLER
فغادي تزيد controller جديد سميه Post غادي تمشي ل app/http/controller زيدو بل commande :
php artisan make:controller PostsController --resource
منبعد فيه غادي يكونوا عندنا les fonctions لي غادي نحتاجو كاين:
- index كنسترجع فيها les posts وكنرسلهم للملف index غادي نزيدوه من بعد.
- create كترجعنا لملف لي غادي يمكن من إضافة post جديد.
- store كتزيد post جديد منبعد مكتدير ل validation ديال الحقول.
- show كنسترجع بها post بل id ديالو وكنعرضوا فالملف view.
- edit كنسترجع بها ل post لي غادي نعدلو منبعد ففورم التعديل.
- update كنعدل بها post بل id ديالو منبعد مكتدير ل validation ديال الحقول.
- destroy كتسترجع post بل id ديالو وكتمسحوا.
الكود ديال ل controller هو :
<?php
namespace App\Http\Controllers;
use App\Post;
use Illuminate\Http\Request;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$posts = Post::all();
return view('posts.index',compact('posts'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$this->validate($request,[
'title' => 'required',
'body' => 'required',
]);
$post = new Post();
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect()->route('index')
->with('success','Post ajouté avec succés');
}
/**
* Display the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
$post = Post::find($id);
return view('posts.view',compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
$post = Post::find($id);
return view('posts.edit',compact('post'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function update(Request $request,$id)
{
//
$this->validate($request,[
'title' => 'required',
'body' => 'required',
]);
$post = Post::find($id);
$post->title = $request->title;
$post->body = $request->body;
$post->update();
return redirect()->route('index')
->with('success','Post modifié avec succés');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
$post = Post::find($id);
$post->delete();
return redirect()->route('index')
->with('success','Post supprimé avec succés');
}
}
2- إضافة les routes ديالنا
فباش نتمكن من التنقل بين الصفحات وننفذ les requêtes خصني نزيد les routes ديالي.
غادي تمشي ل routes/web.php غادي تزيد les routes ديال الإضافة التعديل و الحذف الكود لي زدنا هو :
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/show/{id}/post',[
'uses'=>'PostsController@show',
'as'=>'post.show'
]);
Route::get('/edit/{id}/post',[
'uses'=>'PostsController@edit',
'as'=>'post.edit'
]);
Route::post('/store/post',[
'uses'=>'PostsController@store',
'as'=>'post.store'
]);
Route::post('/update/{id}/post',[
'uses'=>'PostsController@update',
'as'=>'post.update'
]);
Route::post('/delete/{id}/post',[
'uses'=>'PostsController@destroy',
'as'=>'post.delete'
]);
Route::resource('/','PostsController');
3- إضافة ل الملف الرئيسي
الملف الرئيسي أو ل main layout فيه كيكون عندي structure html ديالي وروابط css و javascript.
كنزيد ملف جديد ف views سميه layout.blade.php هنا خدمنا ب bootstrap كنزيد الرابط ديالو مع ل yield content@ فين غادي يكون لمحتوى ديال كل صفحة.
الكود لي زدنا هو :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<title>Laravel Mongodb CRUD Application</title>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
4- عرض les posts كاملين من قاعدة البيانات
باش نعرض les posts كاملين خص نزيد ملف جديد نسميه index.blade.php ف views منبعد فيه غادي يكون الكود لي كيمكن من عرض les posts.
كنسترجع ل posts$ لي جاوني من ل fonction index ديال PostsController منبعد كنخدم ب foreach باش كنعرضهم فالجدول مع روابط الإضافة المشاهدة الحدف والتعديل لي كيديو ل les routes لي زدنا.
الكود ديال الملف هو :
@extends('posts.layout')
@section('content')
<div class="row">
<div class="col-lg-12 mt-4">
@if ($message = Session::get('success'))
<div class="alert alert-success">
{{ $message }}
</div>
@endif
<div class="card bg-light border-primary">
<div class="card-body">
<div class="float-left mb-3">
<h2>Posts</h2>
</div>
<div class="float-right mb-3">
<a class="btn btn-success" href="{{ route('create') }}"> Ajouter</a>
</div>
<table class="table table-stripped">
<tr>
<th>Id</th>
<th>Titre</th>
<th>Description</th>
<th width="280px">Action</th>
</tr>
@foreach ($posts as $post)
<tr>
<td>{{ $post->id }}</td>
<td>{{ $post->title }}</td>
<td>{{ $post->body }}</td>
<td>
<form action="{{route('post.delete',$post->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('post.show',$post->id) }}">Voir</a>
<a class="btn btn-primary" href="{{ route('post.edit',$post->id) }}">Modifier</a>
<input type="hidden" name="_token" value="{{Session::token()}}">
<button type="submit" class="btn btn-danger">Supprimer</button>
</form>
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</div>
@endsection