Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使用@Method注释有什么意义_Symfony_Annotations_Symfony Routing - Fatal编程技术网

Symfony 使用@Method注释有什么意义

Symfony 使用@Method注释有什么意义,symfony,annotations,symfony-routing,Symfony,Annotations,Symfony Routing,Route Method有一个快捷方式@Method注释来指定 路由允许使用HTTP方法。要使用它,请导入该方法 注释命名空间: 我见过很多开发人员将此方法限制为只获取或发布, 但是,既然控制器默认允许这两种方法,为什么开发人员选择将其限制为只有一种方法?这是某种安全措施吗?如果是的话,你会受到什么样的攻击 首先,下面有几种方法,不仅仅是GET和POST 我不认为这是安全原因,更多的是尊重标准(例如)。 我个人对几种行为使用不同的方法。对我来说,有看到版本并应用版本的动作。 对于一个URL,这是

Route Method有一个快捷方式@Method注释来指定 路由允许使用HTTP方法。要使用它,请导入该方法 注释命名空间:

我见过很多开发人员将此方法限制为只获取或发布,
但是,既然控制器默认允许这两种方法,为什么开发人员选择将其限制为只有一种方法?这是某种安全措施吗?如果是的话,你会受到什么样的攻击

首先,下面有几种方法,不仅仅是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