【问题标题】:How to access values of multiple parameters passed to Laravel controller如何访问传递给 Laravel 控制器的多个参数的值
【发布时间】:2014-07-27 22:26:39
【问题描述】:

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

生成 URL:

http://domain/managers/1/2

其中 1 很容易作为经理的 $id 访问,但是当我尝试使用 $parameter2 访问第二个参数“2”时,例如使用简单的 return: "id=$id and parameter2=$parameter2" 语句,我得到一个 "unidentified variable: $parameter2" 错误。

我做错了什么?

有没有更好的方法来传递多个参数?我特别问“更好的方法?”问题是因为我想做的是使用第二个参数来更改数据库表中的值,并使用“get”方法,有人可能会更改 URL 中的参数值,从而导致恶作剧。我必须使用“发布”方法吗?我希望能够使用链接,因为它在我的应用程序设计中效果更好。

谢谢!


我被要求包含控制器,我很乐意这样做。最初,只是为了测试,正如我提到的,我的控制器是一个简单的返回来显示两个传递参数的值。但这是我想要做的,包括函数的实际名称(“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)

}

【问题讨论】:

  • 发布你的控制器dosomething函数
  • 我已经添加了控制器和模型。看上面。谢谢。

标签: php laravel-4 parameter-passing


【解决方案1】:

只是改变

public function update_group($id)

public function update_group($id, $parameter2)

【讨论】:

  • 谢谢!当然! (傻我!)我真的很感激。
【解决方案2】:

您的路线看起来一切正常。查看控制器代码会有所帮助,但很可能,您的控制器的 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'));

【讨论】:

  • 谢谢。我已将控制器添加到上面的原始问题中。 var_dump 给出的结果与尝试显示参数值的返回结果相同——每次,我都会收到“未定义的变量:参数 2”错误。如果我尝试使用查询字符串,我会得到同样的错误。 Route 回到了控制器,所以这无济于事。正如我所提到的,URL 构造正确,只是我无法访问控制器中的第二个参数。一定有办法做到这一点。
  • 你的路由正在传递 $parameter2,但你的控制器不接受它。尝试将您的方法声明更改为 public function update_group($id, $parameter2) 这应该可以解决问题。
猜你喜欢
  • 2020-11-30
  • 2015-10-19
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
相关资源
最近更新 更多