Php 在Laravel 5中的中间件中获取url id
我正在制作一个中间件来检查锦标赛的所有权 因此,在url中,我有: 我需要在$tournamentId中获得“1” 在中间件中,我只有$request和$closure参数,所以我尝试了Php 在Laravel 5中的中间件中获取url id,php,laravel-5.1,laravel-middleware,Php,Laravel 5.1,Laravel Middleware,我正在制作一个中间件来检查锦标赛的所有权 因此,在url中,我有: 我需要在$tournamentId中获得“1” 在中间件中,我只有$request和$closure参数,所以我尝试了 $tournamentId = $request->get("tournaments"); 正如@Amir Bar所说: $tournamentId = $request->tournaments; 我和他核对了路线 php artisan route:list 我得到 GET|HEAD |
$tournamentId = $request->get("tournaments");
正如@Amir Bar所说:
$tournamentId = $request->tournaments;
我和他核对了路线
php artisan route:list
我得到
GET|HEAD | tournaments/{tournaments} | tournaments.show | App\Http\Controllers\TournamentController@show | auth,roles,ownTournament |
DELETE | tournaments/{tournaments} | tournaments.destroy | App\Http\Controllers\TournamentController@destroy | auth,roles,ownTournament |
PATCH | tournaments/{tournaments} | | App\Http\Controllers\TournamentController@update | auth,roles,ownTournament |
PUT | tournaments/{tournaments} | tournaments.update | App\Http\Controllers\TournamentController@update | auth,roles,ownTournament |
GET|HEAD | tournaments/{tournaments}/edit | tournaments.edit | App\Http\Controllers\TournamentController@edit | auth,roles,ownTournament | | auth,roles,ownTournament |
但什么都不管用
我的中间件:
class OwnTournament
{
/**
* Check the ownership of tournaments
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
dd($request->route());
return $next($request);
}
}
$tournamentId = $request->tournamentId
你知道我该怎么做吗?如果你的路线是:
Route::get('tournaments/{tournamentId}/edit');
在中间件中执行此操作:
class OwnTournament
{
/**
* Check the ownership of tournaments
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
dd($request->route());
return $next($request);
}
}
$tournamentId = $request->tournamentId
如果您的路线如下:
Route::resource('name')
这样做:
$tournamentId = $request->name;
您也可以这样做来获取更多关于发生了什么的信息:
dd($request->route()->parameters());
这就是我的解决方案
public function handle($request, Closure $next)
{
if (Auth::check()) {
$user = Auth::user();
$tournaments = $user->tournaments;
$tournament = null;
if ($request->tournaments != null || $request->tournamentId != null) {
$tournament = $request->tournaments;
if ($tournament != null) {
if (!$tournaments->contains($tournament)) {
return "You don't have privileges to access this resource";
}
}
}
}
return $next($request);
}
事情是中间件被调用了两次,第一次,它什么都不能访问。我不知道为什么
基本上,解决了,但不理解为什么会发生,所以解决了一半:(
感谢@Amir Bar帮助我!它不起作用:(我在我的routes.php中使用Route::resource('tournaments','TournamentController');也请注明我的问题。dd($request->Route()->parameters());给了我一个错误。dd($request->Route());给了你什么?你能发布你的中间件吗?第一条指令是dd,它仍然是空的吗