laravel route.php更多控制器动作方法

时间:2014-04-25 14:51:08

标签: php laravel laravel-routing

我有三条路线:

Route::get('{project}', 'ProjectController@showProject')
->where('project', '[A-Za-z0-9-]+');            

Route::get('{project}/{module}', 'ProjectController@showModule')
->where('module', '[A-Za-z0-9-]+');

Route::get('{project}/{module}/{submodule}/{resources}',   'ProjectController@showGraphsResources')
->where(array('submodule' => '[A-Za-z0-9-]+','resource', '[A-Za-z0-9-]+'));

只有projectController中的功能不同

如何使用不同的动作制作一条路线?

有些想法......(这是不正确的)

Route::get('{project}/{module}/{submodule}/{resources}', 'ProjectController@showProject' 'ProjectController@showModule','ProjectController@showGraphsResources',)
->where(array('submodule' => '[A-Za-z0-9-]+','resource', '[A-Za-z0-9-]+'));

2 个答案:

答案 0 :(得分:0)

我想:

Route::get('{project}/{module}/{submodule}/{resources}', 'ProjectController@showGraphsResources')->where(array('submodule' => '[A-Za-z0-9-]+','resource', '[A-Za-z0-9-]+'));

Route::get('{project}/{module}', 'ProjectController@showModule')->where('module', '[A-Za-z0-9-]+');

Route::get('{project}', 'ProjectController@showProject')->where('project', '[A-Za-z0-9-]+');

应该有用。

答案 1 :(得分:0)

使用一条路线进行多项行动(IMO)看起来不错,但是......你可以尝试这样的事情:

Route::get(
    '{project}/{module?}/{submodule?}/{resources?}',
    function($project, $module = null, submodule = null, $resources = null) {
        if(!is_null($project)) {
            $pc = App::make('ProjectController');
            if(is_null($module)) return $pc->showProject($project);
            else {
                if(is_null($submodule)) return $pc->showModule($project, $module);
                else {
                    if(!is_null($resources)) return $pc->showGraphsResources($project, $module, $submodule, $resources);
                }
            }
        }
    }
);

现在在你的ProjectController中创建三个这样的方法:

class ProjectController extends BaseController {

    public function showProject($project)
    {
        //...
    }

    public function showModule($project, $module)
    {
        //...
    }

    public function showGraphsResources($project, $module, $submodule, $resources)
    {
        //...
    }
}

或者,您只能使用一个missingMethod来捕获控制器中的所有方法,例如:

class ProjectController extends BaseController {

    public function missingMethod($args = array())
    {
        // Now check the $args passed,
        // depending on the $args you
        // may take an action, try dd($args)
    }
}