Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5中的中间件中获取url id_Php_Laravel 5.1_Laravel Middleware - Fatal编程技术网

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

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 |

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

因此,在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);
    }
}
 $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,它仍然是空的吗