我有一条路线用于将数据发布到服务器。我想获取发布的数据并将其记录在数据库中。我可以在句柄函数
中获取表单发布数据吗?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和
中是否可行
我可以在中间件中访问它吗?
答案 0 :(得分:-1)
不,你不能这样做,它将无法正常工作。仅使用中间件并像Role:editor
一样传递参数,其中editor
是参数
public function handle($request, Closure $next, $editor)
您还可以从中间件中的$request
参数访问路径信息名称,方法类型。
请记住,对于使用可能不是最佳生产方法的中间件的每个路由的每个请求,都会触发一个查询。尝试从中间件触发事件并让事件侦听器处理其余事件(插入查询等)。
答案 1 :(得分:-1)
是的,您可以从Middleware获取您的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”的控制器
routes / 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);
}
}