Php 如何在Symfony 2中获取请求参数?
我对symfony很陌生。在java和其他语言中,我可以使用Php 如何在Symfony 2中获取请求参数?,php,symfony,Php,Symfony,我对symfony很陌生。在java和其他语言中,我可以使用request.getParameter('parmeter name')获取值 我们是否可以用symfony2做类似的事情。 我见过一些例子,但没有一个对我有用。假设我有一个名为用户名的表单字段。在form action中,我尝试使用以下内容: $request = $this->getRequest(); $username= $request->request->get('username'); public
request.getParameter('parmeter name')
获取值
我们是否可以用symfony2做类似的事情。我见过一些例子,但没有一个对我有用。假设我有一个名为用户名的表单字段。在form action中,我尝试使用以下内容:
$request = $this->getRequest();
$username= $request->request->get('username');
public function someAction(Request $request)
我也试过了
$username=$request->getParameter('username')代码>
及
但所有选项都不起作用。不过,以下选项效果良好:
foreach($request->request->all() as $req){
print_r($req['username']);
}
我在使用getParameter()
方法时哪里做错了。任何帮助都将不胜感激。命名并不那么直观:
use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request)
{
// $_GET parameters
$request->query->get('name');
// $_POST parameters
$request->request->get('name');
可以使用以下代码获取表单字段值
use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request)
{
// retrieve GET and POST variables respectively
$request->query->get('foo');
$request->request->get('bar', 'default value if bar does not exist');
}
或者,您也可以使用
$request->request->all()
我做得更简单:
use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request)
{
$foo = $request->get('foo');
$bar = $request->get('bar');
}
另一个选项是在动作函数定义中引入参数:
use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request, $foo, $bar)
{
echo $foo;
echo $bar;
}
然后假设您在routing.yml文件中将{foo}和{bar}定义为URL模式的一部分:
acme_myurl:
pattern: /acme/news/{foo}/{bar}
defaults: { _controller: AcmeBundle:Default:getnews }
试一试
检查公式字段的属性名称如果需要从选择中获取值,可以使用:
$form->get('nameSelect')->getClientData();
控制器内部:
$request = $this->getRequest();
$username = $request->get('username');
由于现在$this->getRequest()
方法已被弃用,您需要将Request
对象注入控制器操作,如下所示:
$request = $this->getRequest();
$username= $request->request->get('username');
public function someAction(Request $request)
之后,您可以使用以下选项之一
如果要从请求获取POST数据,请使用以下命令:
$request->request->get('var_name');
但如果要从请求获取数据,请使用以下命令:
$request->query->get('var_name');
试试这个,它管用
$this->request = $this->container->get('request_stack')->getCurrentRequest();
考虑到您的选择:
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
简单:
$request->request->get('param')
($\u POST['param']
)或
$request->query->get('param')
($\u get['param']
)
良好的Symfony表单,具有所有验证、值转换和带错误的表单呈现以及许多其他功能:
介于两者之间的内容(参见下面的示例)
您可以这样做:
$clientName = $request->request->get('appbundle_client')['clientName'];
有时,当属性受到保护时,您无法访问以获取常用访问方法的值:
(职位)
(得到)
(通用)
大多数情况下,如获取查询字符串或表单参数,都包含在上面的答案中
在处理原始数据时,如要将主体中的原始JSON字符串作为JSON\u decode()
的参数,可以使用该方法
$content = $request->getContent();
有关Symfony中HTTP请求的其他有用信息,请参见软件包文档
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request, $id) {
$post = $request->request->all();
$request->request->get('username');
}
谢谢,您也可以为symfony 4用户使用上述代码:
$query = $request->query->get('query');
#www.example/register/admin
/**
* @Route("/register/{role}", name="app_register", methods={"GET"})
*/
public function register(Request $request, $role): Response
{
echo $role ;
}
第二行有一个输入错误:$request->request-get()
应该是$request->request->get()
。可能是这样吗?我在代码中也写了同样的内容。这里漏掉了。很抱歉这里的输入错误。这仍然不起作用。您是否(a)检查手册以确保get()
是正确的方法,以及(b)打开PHP通知以便查看是否有任何问题?(c) Symfony 2是否有类似Symfony 1的调试工具栏,以便查看是否有错误?是否混淆了名字和用户名?这里有更多信息:它与PHP使用的不同,但实际上更有意义$\u GET
数据是来自查询字符串的数据(根本不需要GET
请求),而$\u POST
数据是来自请求正文的数据(也不必是POST
请求,可以是PUT
)。尝试了$request->query->GET('name');但是它也不起作用。我如何从PUT请求中获取参数?这里的命名非常奇怪,当然$request->get
和$request->post
会更简单。来自igorw的评论清楚地说明了这种奇怪的命名约定$request->request->all()对我有效,但类似于$request->query->->get('foo');不起作用。+1,因为我认为在所有响应中,只有这一个真正说明了不明显的事情-如果您在symfony的form builder的帮助下自动创建了表单,symfony会将表单字段重命名为超出您预期的内容。这里提到的name=“acme\u demobundle\u userform[field\u name]”语法不适用于PHP5.3.10。支持该功能的最低版本是什么?@justinasleys try$userType=$request->request->get('acme\u demobundle\u userType')$用户名=$userType['username']@Justinasleys语法是PHP5.4,无法定义“用户名”。所以最好先检查一下“?”。在第一个例子中,如果我在查询字符串和POST正文中都有foo
参数,那么$request->get('foo')
将返回哪个参数?看起来优先级是get,PATH,POST这是最好的答案不是。该方法本身的文档表示,不鼓励使用它,因为它比通过特定集合访问GET/POST参数要重。答案是正确的$request->GET('foo')代码>适用于所有行李(顺序为:路径、获取、发布)。然而,$request->request->get('foo')代码>仅适用于邮袋。最后,如果我们知道数据的位置(get/POST),则不建议使用第一个($request->get()
)。在较新版本的Symfony中,$this->getRequest()
不赞成将请求注入控制器操作,例如:公共函数showAction(request$request,$id)代码>这根本不能回答问题。提出问题的人已经有权访问请求对象。@LaytonEverson抱歉,您弄错了,他的方法/$this->getRequest()从2.4开始就被弃用了,这就是为什么它不起作用,所以他实际上没有权访问请求对象;)虽然您没有错,但asker想知道是什么方法从reque检索变量
$content = $request->getContent();
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request, $id) {
$post = $request->request->all();
$request->request->get('username');
}
$query = $request->query->get('query');
/**
* @Route("/register/{role}", name="app_register", methods={"GET"})
*/
public function register(Request $request, $role): Response
{
echo $role ;
}