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