1

我对 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',
        '
      ));

应用程序/控制器/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 。

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

4

2 回答 2

0

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

根据您打算实现的功能,您还可以使用资源丰富的控制器和路由

于 2013-10-14T11:38:39.963 回答
0

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

于 2013-10-14T14:42:14.807 回答