【问题标题】:Better way to route and create View路由和创建视图的更好方法
【发布时间】:2013-10-21 22:32:52
【问题描述】:

我对 laravel 还是很陌生,从我在 laravel MVC 应用程序中看到的情况来看,大多数教程都使用控制器通过 View::make('[PATH]') 返回视图,所以典型的场景是这样的: app/routes.php

    Route::get('search', array(
        'uses' => 'SearchController@newSearch',
        'as' => 'search.index'
    ));
    Route::get('search_result', array(
        'uses' => 'SearchController@runSearch',
        '
      ));

app/controllers/SearchControllers.php

    public function newSearch()
    {
        return View::make('search');
    }

    public function runSearch()
    {
        //validate and query search

        return View::make('search')
            ->with('result',$result);
    }

这一切都很好,除了如果稍后我们决定重组视图并将 search.php 与其他相关视图一起放置在 web/search.php 中,我们最终不会不得不跟踪所有控制器更新视图的路径?

相反,如果我将 route.php 作为“视图工厂”而不是像这样:

    Route::get('search',  array('as' => 'search.index', function()
    {
        return View::make('search');
    }));
    Route::get('search_query', array(
        'uses' => 'SearchController@runSearch'
    ));
    Route::get('search_result',  array('as' => 'search.result', function()
    {
        return View::make('search')
            ->with('result',Session::get('result'));
    }));

这仍然有效,尽管需要额外的路由来创建视图,但我们只需要跟踪和更新 route.php 如果我们需要重组或更改名称意见。

那么使用控制器以这种方式编写路由会有任何问题吗?还是有其他更好的方法可以将视图路径从控制器中抽象出来?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    显然routes.php 应该只包含有关路由的信息。它不应该包含任何业务登录,这是针对控制器的。因此,就您目前的路线而言,我认为这很好,但是如果您需要向 search_result 路线添加一些业务逻辑,那么您需要将其移动到控制器并修改您的路线。我认为它在控制器中比在routes.php 中呈现更好。

    根据您打算实现的功能,您也可以使用resourceful controllers & routing

    【讨论】:

    • 好吧,在示例中,我没有为修改后的控制器附加任何代码,但是是的,我不会在路由上进行任何业务逻辑处理,因为这就是控制器的用途,除非你'将附加参数(结果)称为业务逻辑。我知道这是编写 MVC 应用程序的常见做法,但我只是想知道在这种情况下,是否有更好的方法来返回 View,除了编写一个 RESTful 控制器。
    • @har2vey 我的意思是,您目前所拥有的我会说是可以接受的,但控制器中应该有任何不仅仅是一个返回值。
    【解决方案2】:

    您总是可以在您的类中创建一个属性来存储视图的名称,并在您想要创建视图时调用该属性。

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 2012-10-04
      • 1970-01-01
      • 2019-07-19
      • 2012-06-05
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多