use*_*427 7 php laravel laravel-routing
我是laravel的新手,我真的很难理解如何传递多个可选的url参数.
将3个可选参数传递给控制器时,对路由进行编码的标准方法是什么?
还有一种方法可以编写路由以允许将命名参数传递给控制器吗?
如
public/test/id=1&page=2&opt=1
or
public/test/id=1/page=2/opt=1
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
如果您有多个可选参数
Route::get('test',array('as'=>'test','uses'=>'HomeController@index'));
Run Code Online (Sandbox Code Playgroud)
在你的控制器里面
class HomeController extends BaseController {
public function index()
{
// for example public/test/id=1&page=2&opt=1
if(Input::has('id'))
echo Input::get('id'); // print 1
if(Input::has('page'))
echo Input::get('page'); // print 2
//...
}
}
Run Code Online (Sandbox Code Playgroud)
命名参数通常作为路径段完成,但没有明确命名.所以例如你可以这样:
Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) {
// do something
});
Run Code Online (Sandbox Code Playgroud)
$id,$page并且$opt在这里都是可选的,如?段定义中所定义的,以及它们在函数中具有默认值的事实.但是,你会注意到这里存在一些问题:
$opt在真正可选的,$page必须提供,如果$opt是,而且$id必须是如果$page是这是Laravel将命名段映射到函数/方法参数的方式所带来的限制.理论上,您可以实现自己的逻辑来实现此功能,但是:
Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) {
if ($first) {
list($name, $value) = @explode('=', $first, 2);
$$name = $value;
}
if ($second) {
list($name, $value) = @explode('=', $second, 2);
$$name = $value;
}
if ($third) {
list($name, $value) = @explode('=', $third, 2);
$$name = $value;
}
// you should now have $id, $page and $opt defined if they were specified in the segments
});
Run Code Online (Sandbox Code Playgroud)
并不是说这是一个非常天真的解决方案,依靠盲目爆炸=以及设置任意输入变量的名称(这显然是在寻找麻烦).您应该为此代码添加更多检查,但它应该让您了解如何克服上述两个问题.
应该注意的是,这有点违背了在Laravel中执行路由和URI的"正确方法",所以除非你真的需要这个功能,否则你应该重新思考将这些URI形成为Laravel框架的方式.更多的设置.
| 归档时间: |
|
| 查看次数: |
8236 次 |
| 最近记录: |