如何访问传递给Laravel控制器的多个参数的值

时间:2014-07-27 22:26:39

标签: php laravel-4 parameter-passing

我试图弄清楚如何访问传递给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)

}

2 个答案:

答案 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&paramter2=secondParameter

var_dump(Request::query('id')).'<br />';
var_dump(Request::query('paramter2'));