Php 中间件laravel不在Route::any中工作
我是一名ASP.NETMVC开发人员,现在我试图学习Laravel框架,但我在中间件方面遇到了问题。 我们在ASP.NET MVC中有一个默认路由,该路由有助于我们了解当前使用的witch控制器或操作,这是一个默认路由:Php 中间件laravel不在Route::any中工作,php,laravel,routes,middleware,Php,Laravel,Routes,Middleware,我是一名ASP.NETMVC开发人员,现在我试图学习Laravel框架,但我在中间件方面遇到了问题。 我们在ASP.NET MVC中有一个默认路由,该路由有助于我们了解当前使用的witch控制器或操作,这是一个默认路由: routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { contro
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我们在控制器中使用一些关键字来控制中间件,例如:
[Authentication]
public class HomeController : BaseController {
我尝试在Laravel创建这条路线,在多次尝试之后,我创建了这条路线,这就是我的路线
Route::any('/{controller?}/{action?}', function($controller = "", $action = ""){
$app = app();
if( empty($action) && empty($controller) ){
$controller = "Home";
$action .= "Index";
}
if( isset($controller) && empty($action) ){
$action .= ucfirst($controller);
$controller = "Home";
}
$action = strtolower(request()->getMethod()) . ucfirst($action);
$controller = 'App\Http\Controllers\\' . ucfirst($controller) . 'Controller';
if( ! class_exists($controller) ){
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
}
$controller = $app->make($controller);
if ( ! method_exists( $controller, $action ) ){
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
}
return $controller->callAction($action, [request()]);
});
对于set中间件,我在controller中进行了尝试
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
但是中间件不起作用。中间件必须连接到路由,所以最简单的解决方案就是添加
->middleware('auth');
在您的路线功能之后,例如:
Route::any('/{controller?}/{action?}', function($controller = "", $action = ""){
// your code
})->middleware('auth');
希望它有帮助中间件必须连接到路由,所以最简单的解决方案就是添加
->middleware('auth');
在您的路线功能之后,例如:
Route::any('/{controller?}/{action?}', function($controller = "", $action = ""){
// your code
})->middleware('auth');
希望它能有所帮助当然中间件不起作用了。路由器需要创建一个控制器实例,以便能够获得可在其构造函数中定义的中间件,从而在路由通过管道发送到目的地之前为请求构建中间件堆栈。控制器本身不运行中间件。路由器不知道您在路由关闭定义中正在做什么。关于中间件的一切都发生在您开始执行路由操作之前。一旦您执行了该操作,您就已经通过了中间件堆栈(现在不能添加到它) 在您的示例中,路由不是到控制器的,而是基于闭包的路由。并且没有为该路由定义中间件 拉威尔不久前删除了“隐式控制器”,支持显式定义路由
您正在路由中创建自己的路由逻辑,该路由在请求已通过整个中间件堆栈后由路由器处理。唯一可能使用的中间件是直接分配给您定义的路由的任何中间件。当然,中间件不起作用。路由器需要创建一个控制器实例,以便能够获得可在其构造函数中定义的中间件,从而在路由通过管道发送到目的地之前为请求构建中间件堆栈。控制器本身不运行中间件。路由器不知道您在路由关闭定义中正在做什么。关于中间件的一切都发生在您开始执行路由操作之前。一旦您执行了该操作,您就已经通过了中间件堆栈(现在不能添加到它) 在您的示例中,路由不是到控制器的,而是基于闭包的路由。并且没有为该路由定义中间件 拉威尔不久前删除了“隐式控制器”,支持显式定义路由
您正在路由中创建自己的路由逻辑,该路由在请求已通过整个中间件堆栈后由路由器处理。唯一可能使用的中间件是直接分配给您定义的此路由的任何中间件。是否触发了该方法?只是一个旁注,具有多个可选URL参数,如
{controller?}/{action?}
是一个坏主意;如果您有/one/two
,它会工作,但是如果您有/two
,并且希望two
成为操作,它就不会工作。否则,您将不得不放入/null/two
(或/0/two
,等等)并处理“falsy”参数。该方法被激发了吗?只是一个旁注,拥有多个可选URL参数,如{controller?}/{action?}
是个坏主意;如果您有/one/two
,它会工作,但是如果您有/two
,并且希望two
成为操作,它就不会工作。否则,您必须输入/null/two
(或/0/two
,等等)并处理“falsy”参数。是的,这将起作用,但我希望在我的代码中动态更改,并在其他控制器中更改,这将起作用,但我希望在我的代码中动态更改,并在其他控制器中更改