макалалар

Laravel орто программасы кантип иштейт

Laravel орто программасы колдонуучунун суроо-талабы менен тиркеменин жообуна кийлигишкен ортодогу колдонмо катмары.

Бул колдонуучу (Laravel көрүнүшү) серверге (Laravel контроллери) суроо-талапты жасаганда, сурам ортомчу программа аркылуу өтөт дегенди билдирет. Ошентип, орто программа сурамдын аныктыгын текшере алат: 

  • эгерде колдонуучунун суроосу аутентификациядан өтсө, суроо-талап бэкендге жөнөтүлөт;
  • эгерде колдонуучунун өтүнүчү аныктыгы текшерилбеген болсо, орто программа колдонуучуну кирүү экранына багыттайт.

Laravel сизге мүмкүнчүлүк берет defiаныктыгын текшерүүдөн башка ар кандай тапшырмаларды аткаруу үчүн кошумча орто программаны бүтүрүңүз жана колдонуңуз. 

Аутентификация жана CSRF коргоо сыяктуу Laravel ортомчу программалары каталогдо жайгашкан app/Http/Middleware .

Демек, орто программалык камсыздоону http суроо чыпкасы деп айта алабыз, ал аркылуу шарттарды текшерип, аракеттерди жасоого болот.

Орто программаны түзүү

Жаңы орто программаны түзүү үчүн биз төмөнкү буйрукту аткарабыз:

php artisan make:middleware <name-of-middleware>

Биз түзөбүз middleware жана биз аны чакырабыз CheckAge, artisan бизге төмөнкүдөй жооп берет:

Жогорудагы терезе орто программанын ийгиликтүү аталышы менен түзүлгөнүн көрсөтүп турат. CheckAge ".

CheckAge орто программасы түзүлгөн же түзүлбөгөнүн көрүү үчүн, колдонмо/Http/Middleware папкасындагы долбоорго өтүңүз, ошондо сиз жаңы түзүлгөн файлды көрөсүз.

Жаңы түзүлгөн файлда төмөнкү код бар

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Орточо программаны колдонуңуз

Орточо программаны колдонуу үчүн биз аны катташыбыз керек.

Laravelде орто программанын эки түрү бар:

  • Middleware globale
  • Route Middleware

Il глобалдык орто программа колдонмонун ар бир HTTP сурамында аткарылат Маршруттук орто программа белгилүү бир жолго дайындалат. Орточо программаны каттоодон өтсө болот app/Http/Kernel.php. Бул файл эки касиетти камтыйт $midleware e $routeMiddleware . $Middleware касиети глобалдык орто программаны жана менчикти каттоо үчүн колдонулат $routeMiddleware маршрутка тиешелүү орто программаны каттоо үчүн колдонулат.

Глобалдык орто программаны каттоо үчүн $middleware касиетинин аягындагы классты тизмектеңиз.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Маршрутка атайын орто программаны каттоо үчүн, $routeMiddleware касиетине ачкычты жана маанини кошуңуз.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Биз түздүк CheckAge мурунку мисалда. Эми муну орто программалык маршруттун касиетине каттай алабыз. Мындай каттоо коду төмөндө көрсөтүлгөн.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Орточо программанын параметрлери

Биз ошондой эле Middleware менен параметрлерди өткөрө алабыз. 

Мисалы, эгер сиздин колдонмоңузда колдонуучу, администратор, супер администратор ж. жана сиз рольдун негизинде иш-аракеттин аныктыгын текшергиңиз келсе, муну орто программа менен параметрлерди өткөрүү менен жасай аласыз. 

Биз түзгөн орто программа төмөнкү функцияны камтыйт жана биз аргументтен кийин ыңгайлаштырылган аргументтерди өткөрө алабыз $кийинки .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Эми биз нөлдөн баштап түзө турган жаңы ортолук программага роль параметрин коюуга аракет кылалы, андан кийин төмөнкү буйрукту аткаруу менен Role Middleware түзүүгө киришели

Колдоо ыкмасын төмөнкүдөй өзгөртүңүз

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

параметрди коштук $role, жана методдун ичинде сызык echo чыгаруу үчүн ролдун атын жазуу.

Инновациялык бюллетень
Инновация боюнча эң маанилүү жаңылыктарды өткөрүп жибербеңиз. Аларды электрондук почта аркылуу алуу үчүн катталыңыз.

Эми белгилүү бир жол үчүн RoleMiddleware орто программасын каттайлы

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Эми орто программаны параметр менен сынап көрүү үчүн биз суроо-талапты жана жоопту түзүшүбүз керек. Жоопту имитациялоо үчүн биз TestController деп атай турган контроллерди түзөлү

php artisan make:controller TestController --plain

жаңы эле аткарылган буйрук папканын ичинде жаңы контроллерди түзөт app/Http/TestController.php, жана ыкманы өзгөртүү index сызык менен echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

Жоопту орноткондон кийин, биз файлды түзөтүү аркылуу суроо-талапты түзөбүз routes.phpкошуу менен route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

Бул учурда биз URL дарегине кирип, мисалды сынап көрөбүз http://localhost:8000/role

жана браузерде биз экөөнү көрөбүз echo

Role editor
Test Controller

Терминалдуу орто программа

Il terminable Middleware жооп браузерге жөнөтүлгөндөн кийин кээ бир тапшырмаларды аткарат. Бул ыкма менен орто программаны түзүү аркылуу жетишүүгө болот орто программада токтотуу. Il terminable Middleware менен катталышы керек middleware глобалдык. Ыкма terminate эки аргумент алат $суроо e $response. 

Ыкма Terminate төмөнкү коддо көрсөтүлгөндөй түзүлүшү керек.

php artisan make:middleware TerminateMiddleware

Орточо программа түзүлгөндөн кийин app/Http/Middleware/TerminateMiddleware.php кодду төмөнкүдөй өзгөртөлү

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

бул учурда бизде бир ыкма бар handle жана ыкма terminate эки параметр менен $request e $response.

Эми орто программаны каттайлы

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Эми биз жоопту имитациялоо үчүн контроллерди түзүшүбүз керек

php artisan make:controller XYZController --plain

класстын мазмунун өзгөртүү

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Эми биз файлды түзөтүшүбүз керек routes/web.php суроо-талапты жандандыруу үчүн керектүү маршруттарды кошуу

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

Бул учурда биз URL дарегине кирип, мисалды сынап көрөбүз http://localhost:8000/terminate

жана браузерде биз төмөнкү саптарды көрөбүз

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Сизге дагы жагышы мүмкүн:

Инновациялык бюллетень
Инновация боюнча эң маанилүү жаңылыктарды өткөрүп жибербеңиз. Аларды электрондук почта аркылуу алуу үчүн катталыңыз.

акыркы макалалар

Келечек мына ушунда: Ташуу өнөр жайы дүйнөлүк экономиканы кандайча өзгөртүп жатат

Аскер-деңиз сектору 150 миллиарддык рынокту көздөй багыт алган чыныгы дүйнөлүк экономикалык держава...

1 Май 2024

Басмачылар жана OpenAI жасалма интеллект тарабынан иштелип чыккан маалыматтын агымын жөнгө салуу боюнча келишимдерге кол коюшат

Өткөн дүйшөмбүдө Financial Times OpenAI менен келишим түзгөнүн жарыялады. FT өзүнүн дүйнөлүк деңгээлдеги журналистикасына лицензия берет…

April 30 2024

Онлайн төлөмдөр: Бул жерде стриминг кызматтары сизди түбөлүккө кантип төлөйт

Миллиондогон адамдар ай сайын абоненттик төлөмдү төлөп, агымдык кызматтар үчүн төлөшөт. Сиз деген жалпы пикир…

April 29 2024

Veeam ransomware үчүн коргоодон баштап жооп кайтарууга жана калыбына келтирүүгө чейин эң комплекстүү колдоону камтыйт

Veeam тарабынан Coveware кибер опузалап инциденттерге жооп берүү кызматтарын көрсөтүүнү улантат. Coveware криминалистика жана ремедиация мүмкүнчүлүктөрүн сунуштайт ...

April 23 2024

Инновацияны өз тилиңизде окуңуз

Инновациялык бюллетень
Инновация боюнча эң маанилүү жаңылыктарды өткөрүп жибербеңиз. Аларды электрондук почта аркылуу алуу үчүн катталыңыз.

бизди ээрчи