[英]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.