我试图弄清楚如何访问传递给Laravel控制器的两个(或更多)参数。我知道如何创建路由,并且URL是正确创建的,但是我只能访问控制器中第一个传递的参数。
路线:
Route::get('managers/{id}/{parameter2}', array('as'=>'dosomething', 'uses'=> 'ManagersController@dosomething'));
其中第一个参数显然是经理的$ id,第二个参数由控制器处理。
查看:
<a href="{{ URL::route('do something',array($manager->id,'parameter2') }}" class="styleClass">Do Something</a>
生成网址:
http://domain/managers/1/2
其中1可以作为管理员的$ id轻松访问,但是当我尝试使用$ parameter2访问第二个参数“2”时,例如使用简单的返回:“id = $ id和parameter2 = $ parameter2”语句,我得到一个“unidentified variable:$ parameter2”错误。
我做错了什么?
有没有更好的方法来传递多个参数?我特别问“更好的方式?”问题,因为我想要做的是使用第二个参数来更改数据库表中的值,并使用'get'方法,有人可能会更改URL中的参数值,从而导致恶作剧。我必须使用'post'方法吗?我希望能够使用链接,因为我的应用程序设计可以更好地工作。
谢谢!
我被要求包含控制器,我很乐意这样做。最初,仅仅是为了测试,正如我所提到的,我的控制器是一个简单的返回来显示两个传递参数的值。但这是我想要做的,包括函数的实际名称(“update_group”而不是“dosomething”) -
ManagersController:
public function update_group($id)
{
DB::table('groups')->where('id','=',$parameter2)->update(array('manager_id'=>$id));
return Redirect::route('managers.show', array('id'=>$id));
}
如果我将$ parameter2替换为实际值,则更新表可以正常工作,因此语法很好。问题是Laravel说$ parameter2是一个未定义的变量,尽管URL包含$ parameter2的值,如上所示。
因为我发现这个问题的答案可能涉及向Manager模型添加一个函数,这里是当前的
Manager.php
class Manager extends Eloquent {
protected $table = 'managers'; ... (mutator and error functions)
}
答案 0 :(得分:2)
只需更改
public function update_group($id)
到
public function update_group($id, $parameter2)
答案 1 :(得分:1)
你的路线看起来都很好。查看控制器代码会有所帮助,但可能在控制器的dosomething()方法中可能没有第二个参数。
public function dosomething($id, $parameter2){
var_dump($id).'<br />';
var_dump($paremter2);
}
如果不是这种情况,您可以尝试从路由的回调中转储它以进一步诊断。
Route::get('managers/{id}/{parameter2}', function($id, $parameter2)
{
var_dump($id).'<br />';
var_dump($paremter2);
});
根据您的使用情况,您可以将它们传递给查询字符串,如下所示:但它并不是最好的方式,除非您正在执行类似构建不会始终以相同的顺序使用相同变量的API。
/managers?id=1¶mter2=secondParameter
var_dump(Request::query('id')).'<br />';
var_dump(Request::query('paramter2'));