【问题标题】:Why does Laravel allow us to render views in routes?为什么 Laravel 允许我们在路由中渲染视图?
【发布时间】:2014-10-22 07:28:23
【问题描述】:

在我大学的最新讲座中,我的教授正在从路线返回视图模板。

Route::get('/list', function() {
 return View::make('list'); 
}

我不明白这怎么可能。我以为只有控制器可以与视图交互?路由如何与视图交互?这是否意味着我们应用程序中的任何类都可以调用View::make 并控制呈现的视图模板?

这引发了更大的问题,即返回的路线是什么?换句话说,当我们的 Laravel 服务器收到请求时,我们的服务器中的某些东西会 ping 路由并且我们的路由会返回一个模板。什么是返回模板的路由?我假设它是 index.php,我知道那里有很多引导方法。有人能解释一下 Laravel 工作原理的内部结构以及为什么我们可以从路由中渲染视图吗?

【问题讨论】:

  • 对于构建不需要复杂控制器的小型应用程序的人们来说,这是一个便捷的捷径。你想太多了。

标签: php laravel


【解决方案1】:

为了灵活性,Laravel 有意使之成为可能。也就是说,在大多数情况下,您需要让控制器返回视图响应。

这种灵活性有时会派上用场;假设您想快速设置路由以输出一些调试数据。在这种情况下,当您可以直接从路由定义中输出它时,构建控制器操作和视图模板将是多余的。还有其他情况,但路由 -> 控制器 -> 视图方法处理大多数用例。

【讨论】:

    【解决方案2】:

    实际上,当您向Laravel 应用程序发出请求时,请求会通过路由匹配,如果找到匹配的路由,则框架会调用为该路由注册的处理程序/操作。所以,它实际上是handler,处理程序可以是callable。因此,当您声明这样的路线时:

    Route::get('url', 'action');
    

    框架只搜索请求的路由,如果在Route Collection 中可用,则它调用/调用/运行该动作/处理程序,处理程序返回响应(View)。所以,如果是这样的话;

    Route::get('url', 'myHandler');
    
    function myHandler()
    {
        //...
        return View::make(...);
    }
    

    在这种情况下,您的执行范围是函数,如果它是类方法,则范围是不同的,但在这两种情况下,处理程序都在控制返回响应,仅此而已。因此,虽然可以从命名函数返回 View,但也可以从匿名函数返回 View。如果您可以从执行范围访问/使用某些东西(其他一些类,例如某物的服务类),则可以使用它。函数和类方法的区别在于scope。因此,在某些情况下(对于单个页面或小型应用程序),这是可能的、简单的并且也很有用,但不是推荐的方式,也不是好的做法。尝试使用类而不是匿名函数。

    为什么 Laravel 允许我们在路由中渲染视图?

    它是一个框架,换句话说,它是一个toolbox 有这么多工具,而这(你问的问题)只是另一个增加它(框架)有用性的工具。制作更好的应用程序不是工具箱的工作,您的工作和工具箱只是帮助您节省精力和时间以提高工作效率的帮手。所以,你有捷径,但你需要明智地选择正确的东西。

    【讨论】:

      【解决方案3】:

      请求生命周期在 Laravel 文档中有很好的解释: http://laravel.com/docs/4.2/lifecycle

      简短回答:路由可以返回响应(即字符串、视图),或者可以加载也可以返回响应的控制器。直接从路线返回视图可能不是很好的做法,但在某些情况下可能很有用。

      【讨论】:

        猜你喜欢
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 2016-02-09
        • 2022-07-20
        • 2021-08-08
        • 2021-12-06
        相关资源
        最近更新 更多