Laravel - 我可以按规则控制路线吗?

时间:2015-06-10 14:53:09

标签: php laravel laravel-5 laravel-routing

所以我有一个Laravel控制器(MainController.php),其中包含以下几行:

...
public function _settings_a(){
    return view('_settings_a');
}
public function _settings_b(){
    return view('_settings_b');
}
public function _settings_c(){
    return view('_settings_c');
}
public function _settings_d(){
    return view('_settings_d');
}
public function _staff_a(){
    return view('_staff_a');
}
public function _staff_b(){
    return view('_staff_b');
}
public function _staff_c(){
    return view('_staff_c');
}
...

我的routes.php如下:

Route::any('_staff_a''MainController@_staff_a');
Route::any('_staff_b''MainController@_staff_b');
...
etc.

如果我改变主意,似乎有很多线条和很多东西要改变......

我想知道我是否可以在routes.php中使用一些正则表达式,在MainController.php中使用等效的正则表达式来处理以下划线(_)开头的路由?

Laravel专家可以分享一些提示/建议吗?我对这个框架很陌生。

2 个答案:

答案 0 :(得分:1)

当然 - 只需将其添加为参数即可。例如。像这样:

Route::any('_staff_{version}', 'MainController@_staff');

public function _staff($version) {
    return view('_staff_'.$version);
}

答案 1 :(得分:1)

我认为你不需要搞乱正则表达式。您可以使用隐式控制器Route::controller(),它不是最佳解决方案,但会执行我认为您想要的操作。

所以而不是

Route::any(..)

你可以做到

Route::controller('url', 'MainController');

所以你的路线是什么' url'会发送给你这个控制器。使用' /'然后添加要调用的控制器中的任何方法。

以下是一个例子:

我的网址:' http://www.example.com/users'

// routes.php
Route::controller('users', UserController');

// UserController.php
public function getIndex()
{
  // index stuff
}

现在我发送一个请求,例如:http://www.example.com/users/edit-user/125

// UserController.php
public function getEditUser($user_id)
{
  // getEditUser, postEditUser, anyEditUser can be called on /users/edit-user
  // and 125 is the parameter pasted to it
}

这样做应该允许您只能向网址发送请求(发布或获取),控制器应该能够根据网址调用正确的方法。

以下是一些有关它的规则:http://laravel.com/docs/5.1/controllers#implicit-controllers