Symfony 使用@Method注释有什么意义
Route Method有一个快捷方式@Method注释来指定 路由允许使用HTTP方法。要使用它,请导入该方法 注释命名空间: 我见过很多开发人员将此方法限制为只获取或发布,Symfony 使用@Method注释有什么意义,symfony,annotations,symfony-routing,Symfony,Annotations,Symfony Routing,Route Method有一个快捷方式@Method注释来指定 路由允许使用HTTP方法。要使用它,请导入该方法 注释命名空间: 我见过很多开发人员将此方法限制为只获取或发布, 但是,既然控制器默认允许这两种方法,为什么开发人员选择将其限制为只有一种方法?这是某种安全措施吗?如果是的话,你会受到什么样的攻击 首先,下面有几种方法,不仅仅是GET和POST 我不认为这是安全原因,更多的是尊重标准(例如)。 我个人对几种行为使用不同的方法。对我来说,有看到版本并应用版本的动作。 对于一个URL,这是
但是,既然控制器默认允许这两种方法,为什么开发人员选择将其限制为只有一种方法?这是某种安全措施吗?如果是的话,你会受到什么样的攻击 首先,下面有几种方法,不仅仅是GET和POST 我不认为这是安全原因,更多的是尊重标准(例如)。
我个人对几种行为使用不同的方法。对我来说,有看到版本并应用版本的动作。
对于一个URL,这是两种不同的行为。即使最后的响应不会改变,控制器级别的行为也是不同的 我认为这是个人偏好的问题,我宁愿看到
/**
* @Route("/edit")
* @Method({"GET"})
* @Template
*/
public function editAction()
{
$obj = new Foo;
$obj->setBaz($this->container->getParameter('default_baz'));
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
return array(
'form' => $form->createView()
);
}
很清楚它是干什么的。它只是实例化您需要的表单,不处理用户输入。现在,您可以通过添加第二个方法来添加操作以处理该版本
/**
* @Route("/edit")
* @Method({"PUT"})
* @Template("AcmeFooBundle:Bar:edit.html.twig")
*/
public function doEditAction(Request $request)
{
$obj = new Foo;
$type = new FooType;
$form = $this->createForm($type, $obj, array(
'action' => $this->generateUrl('acme_foo_bar_doedit'),
'method' => 'PUT'
));
$form->handleRequest($request);
if ($form->isValid()) {
// Play with $obj
}
return array(
'form' => $form->createView()
);
}
也很容易,并且可以在应用程序的其他地方使用(而不是在默认版本页面中)我个人总是定义一个请求方法(POST、GET、PUT等)。我认为(特别是对于RESTfulAPI),这是透明的。它可以保护您免受某些攻击,因为您限制了可以使用的方法。这也是有道理的,因为如果你登录你发布的数据,但没有得到它,如果你要求一篇文章,你确实想得到它:)明白我的意思吗?只有“它使它更透明”已经吸引了我。我总是喜欢定义方法,不管是为了清晰还是其他什么
编辑:还没有看到其他答案(必须是在我按下提交按钮时添加的:)在POST、GET、PUT和DELETE方法(或Http动词)之间进行选择有很多原因。首先,使用GET方法有一些限制,例如,您不能在URL查询字符串或用于上载文件的多部分表单中包含大量数据。 使用POST和GET方法有很多安全方面的考虑,我甚至不知道从哪里开始。你可以用谷歌搜索。最后,在RESTfulWeb服务约定中,CRUD(创建/检索/更新/删除)操作映射到Http方法(POST/GET/PUT/Delete)。例如:
path: /student/{id}, method GET returns a student
path: /student, method POST creates a student
path: /student, method PUT updates student info
最重要的安全原因之一是,URL通常登录在ISP、Apache web服务器和网络设备(防火墙,…)中,如果您包含会话ID等敏感数据。。。您的数据将以纯文本形式存储在许多您不知道的地方。我也建议你看看
path: /student/{id}, method GET returns a student
path: /student, method POST creates a student
path: /student, method PUT updates student info