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


فهاد الدرس العشرون من دورة laravel للمبتدئين غادي نشوفوا حاجة مهمة ف laravel لي هي ل middleware فشنو هي ل middleware هي واحد ل class لي كتمكن باش نحمي الملفات ديالي ونحد من الولوج ليها فمثلا ممكن انني نحدد حتى يكون المستخدم مكونيكطي عاد يمسح post فغادي نشوفوا كيفاش نديرو هادشي فهاد الجزء.


1- إضافة ل middleware ف laravel

فباش نزيد ل middleware ف laravel غادي نمشي ل cmd وندير ل commande :

php artisan make:middleware isLogged

فسميناها isLogged فغادي نمشي ل app/Http/middleware تما غادي نلقاها تزادت من بعد غادي نفتح الملف لي عبارة على class فل fonction handle كنزيد ل code لي كيتحقق واش المستخدم connecté فيلا مكانش كنرسلو للملف ديال ل connexion عبر route login ويلا كان connecté كنخليه ينفذ ل action.

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



                                //
<?php

namespace App\Http\Middleware;
use Auth;
use Closure;

class isLogged
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!Auth::check()){
            return redirect()->route('login');
        }
        return $next($request);
    }
}
                            

2- تسجيل ل middleware ف kernel.php

فباش نخدم بل middleware لي زدت ضروري ما نسجلها فالملف kernel.php.
  فغادي تمشي ل app/Http تما غادي تلقى الملف kernel.php فهنا كنزيد ل middlewares كاملين لي كنزيد
كنمشي ل array $routeMiddleware تما كنزيد ل middleware وكنعطيها اسم هنا سميتها logged.

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

                                //
protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'logged' => \App\Http\Middleware\isLogged::class,
    ];
                            

3- استخدام ل middleware فل controller

فكاين طرق متعددة باش نخدم بل middleware فغادي نشوفوا كيفاش نخدموا بها فل controller PostsController فيلا بغيت نخدم بها فجميع les fonctions كنزيد ل constructeur وداخلو كنزيد ل middleware وكنعطي اسمها هنا عطينا logged لي هي لي زدنا.

فدبا يلا فتحتي الرابط http://localhost/laravelProject/public/posts فالمتصفح ديالك غادي توجه للصفحة الخاصة بتسجيل الدخول.


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

                                //

    public function __construct(){
        $this->middleware('logged');
    }
                            

4- استثناء بعض الملفات من ل middleware

فباش نستثني des fonctions من ل middleware كنزيد واحد ل options ل middleware سميتو except لي كياخد les fonctions لي كنستثني ولي هنا حددت index و show.
 فدبا يلا فتحتي الرابط http://localhost/laravelProject/public/posts فالمتصفح ديالك غادي يخليك تشوف les posts ويلا حاولتي تمسح post عبر الرابط :

غادي توجه للصفحة الخاصة بتسجيل الدخول.

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

                                    //
 public function __construct(){
        $this->middleware('logged',['except'=>['index','show']]);
  }
                                

5- استخدام ل middleware ف route

فشفنا استخدام ل middleware فل controller دبا غادي نشوفوا ف les routes فالطريقة ساهلة فقط كنجي ل route لي بغيت نحميه وكنزيدلو ل middleware.
فهنا زدت ل middleware logged ل route لي كيمكن من حذف post من قاعدة البيانات فيلا حاولتي تمسح post عبر الرابط :

غادي توجه للصفحة الخاصة بتسجيل الدخول.

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

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