路由和创建View的更好方法

时间:2013-10-14 11:12:06

标签: php laravel

我对laravel很新,而且从我在laravel MVC应用程序中看到的,大多数教程使用控制器通过View::make('[PATH]')返回视图,所以典型的场景将如下所示: 应用/ routes.php文件

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

应用/控制器/ 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 意见。

因此,使用控制器以这种方式编写路线会有任何问题吗?还是有其他更好的方法来抽象远离控制器的视图路径?

2 个答案:

答案 0 :(得分:0)

显然routes.php应该只包含有关路由的信息。它不应该包含任何业务登录,这适用于控制器。因此,当前您的路线我会说这很好,但如果您需要在search_result路线中添加一些业务逻辑,则需要将其移至控制器并修改路线。我认为它在控制器中比在routes.php中更好。

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

答案 1 :(得分:0)

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