Php 中间件laravel不在Route::any中工作

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

我是一名ASP.NETMVC开发人员,现在我试图学习Laravel框架,但我在中间件方面遇到了问题。 我们在ASP.NET MVC中有一个默认路由,该路由有助于我们了解当前使用的witch控制器或操作,这是一个默认路由:

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”参数。是的,这将起作用,但我希望在我的代码中动态更改,并在其他控制器中更改,这将起作用,但我希望在我的代码中动态更改,并在其他控制器中更改