第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將中間件添加到 Slim Framework 上的特定路由

如何將中間件添加到 Slim Framework 上的特定路由

PHP
紅糖糍粑 2021-08-28 10:29:50
我正在使用 Slim Framework 構(gòu)建一個(gè) API,我編寫了一個(gè)腳本來創(chuàng)建路由并動(dòng)態(tài)添加它的中間件。問題是由于某種原因,這些路線被應(yīng)用到應(yīng)用程序中的每條路線。如何僅在一條路由上應(yīng)用中間件?這是 route.cfg 文件#[HTTP Verb] [Route] [Controller::method] [middleware|middleware]GET /usuario/autenticar UsuarioController:autenticar logGET /usuario/listar[/{id}] UsuarioController:listar log|autenticarGET /usuario/encerrarSessao UsuarioController:encerrarSessao log|autenticarPOST /usuario/cadastrar UsuarioController:cadastrar log|autenticarPUT /usuario/editar UsuarioController:editar log|autenticarDELETE /usuario/deletar UsuarioController:deletar log|autenticar這是讀取路由文件的腳本<?phpuse Slim\App;use Slim\Http\Request;use Slim\Http\Response;return function (App $app) {    $container = $app->getContainer();$routesFile = file(__DIR__ . '/routes.cfg');foreach ($routesFile as $fileLine) {    $fileLine = str_replace("\n", "", $fileLine);    $fileLine = preg_replace('/\s+/', ' ', $fileLine);    $args = explode(' ', $fileLine);    if (strpos($fileLine, '#') !== false || count($args) < 3) continue;    $verb = array_key_exists(0, $args) ? $args[0] : null;    $endpoint = array_key_exists(1, $args) ? $args[1] : null;    $controller = array_key_exists(2, $args) ? $args[2] : null;    $routeMiddleware = array_key_exists(3, $args) ? $args[3] : null;    $app->{$verb}($endpoint, "$controller");    if (isset($routeMiddleware) && strlen($routeMiddleware) > 0) {        $routeMiddleware = trim($routeMiddleware);        $middlewares = explode('|', $routeMiddleware);        foreach ($middlewares as $middlewareFunction) {            $app->add(function($request, $response, $next) use ($middlewareFunction) {                return Middleware::{$middlewareFunction}($request, $response, $next);            });        }    }}};這是我的中間件類    <?phpuse Slim\App;class Middleware {    public static function autenticar($request, $response, $next) {        //Do stuff...        return $next($request, $response);    }
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

在這種情況下,問題在于這一行為所有路由注冊(cè)了中間件:


$app->add(function($request, $response, $next) use ($middlewareFunction) {

為單個(gè)路由注冊(cè)中間件的工作方式如下:


$this->get('/', \App\Action\HomeIndexAction::class)

    ->add(MyMiddleware::class);

我會(huì)嘗試像這樣更改您的代碼:


<?php


use Slim\App;

use Slim\Http\Request;

use Slim\Http\Response;


return function (App $app) {

    $routesFile = file(__DIR__ . '/routes.cfg');


    foreach ($routesFile as $fileLine) {

        $fileLine = str_replace("\n", '', $fileLine);

        $fileLine = preg_replace('/\s+/', ' ', $fileLine);


        $args = explode(' ', $fileLine);


        if (strpos($fileLine, '#') !== false || count($args) < 3) {

            continue;

        }


        $verb = $args[0] ?? null;

        $endpoint = $args[1] ?? null;

        $controller = $args[2] ?? null;

        $routeMiddleware = $args[3] ?? null;


        // This line has changed

        $route = $app->{$verb}($endpoint, $controller);


        if (isset($routeMiddleware) && $routeMiddleware !== '') {

            $routeMiddleware = trim($routeMiddleware);


            $middlewares = explode('|', $routeMiddleware);


            foreach ($middlewares as $middlewareFunction) {

                // This line has changed

                $route->add(function ($request, $response, $next) use ($middlewareFunction) {

                    return Middleware::{$middlewareFunction}($request, $response, $next);

                });

            }

        }

    }

};



查看完整回答
反對(duì) 回復(fù) 2021-08-28
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)