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