Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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路由失败_Php_Laravel - Fatal编程技术网

Php Laravel路由失败

Php Laravel路由失败,php,laravel,Php,Laravel,我必须根据URL重定向到特定的控制器 我的网址是 http://localhost/project/public/category-1?tracker=category 如果查询字符串tracker是category,那么它应该重定向到ProductsController@category路线 我试过使用下面的代码。但它不起作用 Route::any('{name}', function () { if (Request::get("tracker") == "category")

我必须根据
URL
重定向到特定的
控制器

我的网址是

http://localhost/project/public/category-1?tracker=category
如果查询字符串
tracker
category
,那么它应该重定向到
ProductsController@category
路线

我试过使用下面的代码。但它不起作用

Route::any('{name}', function () {
    if (Request::get("tracker") == "category")
        Route::get('{name}', 'ProductsController@category');
});
但以下代码在不使用
路由
内部
if语句

Route::any('{name}', function () {
    if (AppHelper::decryptURL(Request::get("tracker")) == "category")
        return 1;
});
上面的代码在网页中显示
1
,但在使用
Route::get({name},'ProductsController@category)
而不是
返回1
它将返回空白页

如何修复它。我的编码有任何问题。

您可以使用

Route::any('{name}', function () {
    $tracker = $request->query('tracker');
    if($tracker === 'category') {
      return (new \App\Http\Controllers\ProductsController())->category();
    }
});
或者通过依赖注入

Route::any('{name}', function (ProductsController $productsCtrl) {
    $tracker = $request->query('tracker');
    if($tracker === 'category') {
      return $productsCtrl->category();
    }

});
你可以用

Route::any('{name}', function () {
    $tracker = $request->query('tracker');
    if($tracker === 'category') {
      return (new \App\Http\Controllers\ProductsController())->category();
    }
});
或者通过依赖注入

Route::any('{name}', function (ProductsController $productsCtrl) {
    $tracker = $request->query('tracker');
    if($tracker === 'category') {
      return $productsCtrl->category();
    }

});

这是一个正确的示例,它允许在请求到达控制器并将响应发送到浏览器之前钩住一些功能

namespace App\Http\Middleware;

use Closure;

class CheckTarget
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->tracker <= "category") {
            return redirect('name_of_your_route');
        }

        return $next($request);
    }
}
使用时,你会这样做

protected $routeMiddleware = [
    \\...
    'target' => auth' => \App\Http\Middleware\CheckTarget::class,
]
Route::any('{name}', function () {
    return view('your_view_file_name');
})
->middleware('target');
->name('any_name_you_want');


Route::any('{name}', function () {
    if (Request::get("tracker") == "category") {
        Route::get('{name}', 'ProductsController@category'); // Here you define another route instead of redirect
    }
});

代码中存在一个问题,即不是将用户重定向到您想要的路由,而是在另一个路由句柄中定义另一个
路由
,这是不常见的,应该避免。要重定向,您应该使用
redirect
helper,它获取Laravel将重定向到的URL

,这是一个正确的示例,它允许在请求到达控制器并将响应发送到浏览器之前挂接一些功能

namespace App\Http\Middleware;

use Closure;

class CheckTarget
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->tracker <= "category") {
            return redirect('name_of_your_route');
        }

        return $next($request);
    }
}
使用时,你会这样做

protected $routeMiddleware = [
    \\...
    'target' => auth' => \App\Http\Middleware\CheckTarget::class,
]
Route::any('{name}', function () {
    return view('your_view_file_name');
})
->middleware('target');
->name('any_name_you_want');


Route::any('{name}', function () {
    if (Request::get("tracker") == "category") {
        Route::get('{name}', 'ProductsController@category'); // Here you define another route instead of redirect
    }
});
代码中存在一个问题,即不是将用户重定向到您想要的路由,而是在另一个路由句柄中定义另一个
路由
,这是不常见的,应该避免。要重定向,您应该使用
redirect
helper,它获取Laravel将重定向到的URL