دورة laravel للمبتدئين الدرس السابع


فهاد الدرس السابع من دورة laravel للمبتدئين ومنبعد ما شفنا كيفاش زدنا post فقاعدة البيانات غادي نشوفوا كيفاش نديرو تعديل على post اختاريناه.

فغادي نعرضوا المعلومات الخاصة بل post فل form من بعد غادي نديرو عليه التعديل وكيف شفنا فالدرس السابق غادي نديرو ل form validation لكن بطريقة مغايرة هاد المرة.


1- إضافة ملف التعديل

فأول حاجة غادي ندير غادي نزيد ملف جديد ف views سميه update.blade.php فغادي نزيد فيها لفورم لي هي نفسها لي عندي فالصفحة الرئيسية ديال الإضافة.

التغيير الوحيد لي غادي نديرو غادي يكون ف route فعندي :

- {{(route('post.update',$post->id)}} ولي كيعني بلي المعلومات غادي تمشي ل route post.update مع ل id ديال ل post لي غادي نديرو عليه التعديل.

الكود ديال الملف هو :

                                //
<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
    </head>
    <body>
        {{-- part 3 --}}
        <div class="container">
            <div class="row mt-4">
                <div class="col-md-6">
                    <h3>Modifier un article</h3>
                    <hr>
                    @if(Session::has('success'))
                        <div class="alert alert-success">{{Session::get('success')}}</div>
                    @endif
                    {{-- part 3 --}}
                    @foreach($errors->all() as $error)
                        <div class="alert alert-danger">{{$error}}</div>
                    @endforeach
                    <form action="{{route('post.update',$post->id)}}" method="post">
                        {{csrf_field()}}
                        <div class="form-group">
                            <input type="text" placeholder="Titre" value="{{$post->title}}" name="title" class="form-control">
                        </div>
                        <div class="form-group">
                            <textarea placeholder="Description"  col="30" rows="5" name="body" class="form-control">{{$post->body}}</textarea>
                        </div>
                        <div class="form-group">
                            <button class="btn btn-primary" type="submit">Valider</button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </body>
</html>
                            

2- إضافة ROUTE ف WEB.PHP

غادي نمشي ل web.php غادي نزيد route ديالي لي عطيتو update/{id}/post ولي كتعني بلي غادي ياخد ل id ك paramètre  منبعد كنقول بلي غادي نستعمل ل fonction update لي كاينة ف PostsController وكنعطي ل route ل إسم لي هو post.update.

فالكود لي زدنا ف web.php هو :

                                //
<?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('/', function () {
    return view('welcome');
});

Route::get('/posts','PostsController@index');

Route::get('/edit/{id}/post','PostsController@edit');
//part 2
Route::post('update/{id}/post','PostsController@update')->name('post.update');

Route::post('/create','PostsController@create')->name('post.add');

Route::get('/delete/{id}/post','PostsController@delete');
                            

3- إضافة ل FONCTION UPDATE ل POSTSCONTROLLER

فل controller PostsController كنزيد ل fonction update وكندير تعديل على ل fonction edit لي :

- كتسترجع ل post بل id ديالو منبعد كنرسلو للملف update فين كيتعرض فالفورم كيف كنشوف فالصورة :



فل fonction update كندير ل validation بطريقة مغايرة هاد لمرة باستعمال Request لي كتجي par défaut مع laravel فأنا وريتك جوج ديال الطرق ونت اختار لي بغيتي.

فهنا كنخدم بل fonction validate لي كتاخد الحقول المعنية منبعد كنسترجع ل post بل id ديالو وكندير عليه التعديل وكنوجه المستخدم لملف التعديل مع رسالة نجاح كيف كنشوف فالصورة :

 

الكود لي زدنا ف PostsController هو :
 

                                //
<?php

namespace App\Http\Controllers;
use App\Post;
use Illuminate\Http\Request;
use App\Http\Requests\CreateRequest;

class PostsController extends Controller
{
    //
    public function index(){
        $posts = Post::all();
        foreach($posts as $post){
            echo $post->title;
        }
    }
    //part 5
    public function create(CreateRequest $request){
        $post = new Post();
        $post->title = $request->title;
        $post->body = $request->body;
        $post->save();
        return redirect('/')->with(['success'=>'article ajouté']);
    }
    //part 1
    public function edit($id){
        $post = Post::find($id);
        return view('update',compact('post'));
    }
    public function update(Request $request,$id){
        $this->validate($request,[
            'title' => 'required|min:10',
            'body' => 'required|max:1000'
        ]);
        $post = Post::find($id);
        $post->title = $request->title;
        $post->body = $request->body;
        $post->update();
        return redirect('/edit/'.$id.'/post')->with(['success'=>'article modifié']);
    }
    public function delete($id){
        $post = Post::find($id);
        $post->delete();
        echo 'post supprimé';
    }
}