在 Laravel 5 的中间件中获取 url id

get url id in a middleware in Laravel 5

我正在制作一个检查锦标赛所有权的中间件。

所以在 url 中,我有 :

http://laravel.dev:8000/tournaments/1/edit

我需要在 $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 对我的帮助!