在 Laravel 5 的中间件中获取 url id
get url id in a middleware in Laravel 5
我正在制作一个检查锦标赛所有权的中间件。
所以在 url 中,我有 :
我需要在 $tournamentId
中获得“1”
在中间件中,我只有$request和$closure参数,所以我尝试了
$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);
}
}
知道我应该怎么做吗???
如果您的路线如下:
Route::get('tournaments/{tournamentId}/edit');
在中间件中执行此操作:
$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 对我的帮助!
我正在制作一个检查锦标赛所有权的中间件。
所以在 url 中,我有 :
我需要在 $tournamentId
中获得“1”在中间件中,我只有$request和$closure参数,所以我尝试了
$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);
}
}
知道我应该怎么做吗???
如果您的路线如下:
Route::get('tournaments/{tournamentId}/edit');
在中间件中执行此操作:
$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 对我的帮助!