簡體   English   中英

Laravel中間件獲取路線發布數據和自定義路線鍵值對

[英]Laravel middleware get route post data and custom route key-value pairs

我有一條路由用於將數據發布到服務器。 我想獲取發布的數據並將其記錄在數據庫中。 我可以在handle函數中獲取表單發布數據嗎

public function handle($request, Closure $next) {
      echo "...intercept post data";
      return $next($request);
   }

第二,例如,我有這條路線

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

我想添加一個可以從中間件訪問的自定義鍵值,即

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

在上面的路線中,我添加了關鍵deed 。在laravel 5和
我可以在中間件中訪問它嗎?

不,您不能做那將無法工作。 僅使用中間件並傳遞與Role:editor的參數,其中editor是參數

public function handle($request, Closure $next, $editor)

您還可以從中間件中的$request參數訪問路由信息名稱,方法類型。

請記住,使用該中間件的每條路線的每個請求都會觸發一個查詢,這可能不是最佳的生產方法。 嘗試從中間件觸發事件,然后讓事件偵聽器處理其余事件(插入查詢等)。

是的,您可以從中間件獲取Route參數。

在您的中間件中,您可以像這樣獲得“匹配的路由對象”:

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

參見print_r($request->route()) ,此Route對象中有一個名為action的屬性。 action屬性具有匹配的Route的所有參數。

假設您有一個名為“ MyMiddleware”的中間件和一個名為“ MyController”的控制器

route / web.php:

Route::get('/', [
    'uses' => 'MyController@index',
    'middleware' => 'App\Http\Middleware\MyMiddleware',
    'deed' => 'View registered users'
]);

app / Http / Middleware / MyMiddleware.php:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Response;

class MyMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $matchedRouteObject = $this->route();
        $deedVariable = $mathedRouteObject->action['deed']; // here you got your variable.
        return $next($request);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM