如何使用 symfony 2.3 在 WebTestCase 中提交无效的选择选项

2024-04-18

我正在尝试在 symfony 2.3 中测试一个表单,该表单具有选择输入...以及文件上传(enctype multipart/form-data)

选择输入如下...

  • 这是必填字段。
  • 有 3 个选项 [1, 2, 3]

使用 DomCrawler 我选择表单

$form = $crawler->selectButton->('Update')->form()

然后尝试设置 select 的值

$form['select'] = null or $form['select'] = ssjksjkajsdfj

DomCrawler 中有一个内部验证系统,如果我这样做,它会返回以下错误。

InvalidArgumentException: Input "select" cannot take "ssjksjkajsdfj" as a value (possible values: 1, 2, 3).

在 symfony 2.4 及更高版本中,DomCrawler/Form 中有一个神奇的方法,称为disableValidation()这非常有效。不幸的是,由于某些依赖项需要 2.3,我无法升级

我也尝试使用$client->Request()直接方法

$post_data = '------WebKitFormBoundaryi7fAxO2jrDFTmxef
Content-Disposition: form-data; name="select"

ssjksjkajsdfj
------WebKitFormBoundaryi7fAxO2jrDFTmxef--';

        $client->request(
            'POST',
            $form->getUri(),
            array(),
            array(),
            array(
                'CONTENT_TYPE' => 'multipart/form-data; boundary=----WebKitFormBoundaryi7fAxO2jrDFTmxef',
            ),
            $post_data
        );

但 symfony 似乎并不知道/关心形式,只是返回一个 没有任何错误消息的常规表单,表单处理程序由于某种原因不会验证表单。

这是控制器中的 updateAction

public function updateAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('CoyoteAdBundle:Ad')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Ad entity.');
    }
    $old_entity = $entity;

    $editForm = $this->createEditForm($entity);
    $editForm->handleRequest($request);

    if ($editForm->isValid()) {

        $this->archiveImage($old_entity);

        $entity->upload();
        $em->flush();
        $this->addSuccessFlash('Ad has been updated successfully!');
        return $this->redirect($this->generateUrl('ad_show', array('id' => $id)));
    }

    return $this->render('CoyoteAdBundle:Ad:edit.html.twig', array(
        'entity'      => $entity,
        'form'   => $editForm->createView(),
    ));
}

在这里我发现了一个确切的问题......使用 Symfony DomCrawler 在选择输入中选择不可能的值 https://stackoverflow.com/questions/22884366/select-impossible-value-in-tests-in-symfony-crawler

但答案不是我想要的。我想测试并确保服务器将返回 200 以及一条消息,让用户知道他们要做什么是不可能的。

PS:我可以使用 Chrome 中的 Postman 达到预期的结果。


我不知道 SF 2.3 中有任何方法可以作为disableValidation。但是,我认为发送虚假请求应该可以解决问题。我还认为您使用请求方法的方式不正确。检查文档 http://symfony.com/doc/2.3/book/testing.html#working-with-the-test-client对于 2.3 SF 版本,您有一个关于如何伪造请求的示例:

// Form submission with a file upload
use Symfony\Component\HttpFoundation\File\UploadedFile;

$photo = new UploadedFile(
    '/path/to/photo.jpg',
    'photo.jpg',
    'image/jpeg',
    123
);// Fake photo upload if you like, if not, just send the select value.

$client->request(
    'POST',
    '/submit',// valid route
    array('select' => 'ssjksjkajsdfj'),// Substitute here the name of your select and the value you want to send
    array('photo' => $photo)
);

它应该发送请求,如果一切正常,控制器应该用 200 和错误进行应答。

希望能帮助到你。

UPDATE

好的,这里有几件事:CSRF 很重要,请求中参数的格式也很重要。

由于您的表单使用 CSRF,因此您应该在请求中将其一起发送,否则它将失败并将您重定向到“空”表单。此外,请求必须以正确的格式发送数据。假设表单的生成代码命名表单中的输入my_form[name]您应该在请求中相应地创建它们:

$csrfToken = $client->getContainer()->get('form.csrf_provider')->generateCsrfToken('my_form');// Generate CSRF for my_form
        $crawler = $client->request(
                'POST', 
                '/ajax/register', // valid route
                array(
            'my_form' => array(// form accepts params in form my_form[name]
                '_token' => $csrfToken,
                'select' => 'asdfasdf',// select I want to send invalid value
                'photo' => $photo, // the uploaded photo
                'whatever' => 'whatever', // rest of required parameters.
            ),
        ));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 symfony 2.3 在 WebTestCase 中提交无效的选择选项 的相关文章

  • WordPress 安装中发现的恶意 PHP 代码有什么作用?

    我能够解码在一些 WordPress 文件中找到的以下 PHP 脚本 只是出于好奇 有人可以告诉我这段代码实际上是做什么的吗 看起来它已经以某种方式复制到同一服务器上的其他 WordPress 安装中
  • 如何使用 jquery ajax 将锚点的值发送到 php

    我正在尝试使用 jquery 将几个锚点的值发送到 php 文件 但我没有从 php 脚本中得到回调 div class result div a href value class star Star 5 a a href value cl
  • 从目录中读取所有文件内容 - php

    这实际上是一个简单的任务 我想显示指定文件夹中所有文件的内容 我正在传递目录名称 echo a href row qname a 在第二页上 我正在迭代目录内容 while entryname readdir myDirectory if
  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • 如何使用 RewriteRule 来为 PHP 修改 $_SERVER['REQUEST_URI'] ?

    有了这个 htaccess RewriteEngine On RewriteRule foo foo 1 here I tried L PT C etc RewriteRule index php L 我已经尝试了第一个 RewriteRu
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • 用PHP动态生成二维码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的网站上生成二维码 他们所要做的就是在其中包含一个 URL 我网站上的变量将提供该 URL
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • Yii2:对 ajax 提交的表单进行 ajax 表单验证

    我想知道是否有 Yii2 专家可以帮助我了解如何最好地结合使用 ajax 表单和 Yii ajax 验证 我想我可以解释这个问题 而无需向您介绍我的所有代码 我正在制作一个促销代码输入表单 用户在表单中输入促销代码 该表单通过 ajax 提
  • 如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段

    我正在尝试在产品评论中添加 电话 字段 WooCommerce 3 针对未注册用户 来宾 电话号码只能由管理员在管理面板中看到 电话字段需要填写 Required 我尝试了这段代码 但这不起作用 function true phone nu
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • phpstorm xdebug 与 symfony2 项目

    我正在尝试使用 xdebug 和 phpstorm 调试 symfony2 应用程序 我的本地开发环境是Ubuntu 14 04 with apache2 Xdebug版本是2 2 7 我在另一个 php 不是 symfony2 项目上使用
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 将实例变量传递到表单中 - Rails

    由于我对 Rails 以及如何跨模型使用变量的了解很少 这可能是一个错误 因此如果需要更多代码来回答它或者我的术语不正确 请告诉我 我很乐意更新问题 我有一个帖子供稿 我希望用户能够 喜欢 这些帖子 虽然以下代码允许 Likes 在单个帖子
  • 选中复选框时提交表单

    有没有办法在选中复选框时提交表单
  • 表单提交后显示 $_FILES['image']

    提交表单后如何显示上传的图片 提交表单后 它将是一个预览页面 因此我不会在 MySQLet 中存储图像类型 BLOB 如何显示 FILES image

随机推荐

  • 投影 - 将 3d 转换为 2d

    我有问题或者很好 我不知道如何将具有 x y z 值的 3d 点转换为 2d 点 我必须绘制投影 其中我确实有点的 x y z 值 但我不知道如何将它们转换为 2d 以便我可以将它们移动到我的轴上 我一直在浏览维基和谷歌 但是我不太确定应该
  • Networkx中的多层图

    我想创建一个多层图 如附图所示 通过连接用以下代码编写的两个图 使用networkx Graph g1 nx read edgelist sample txt nodetype str pos nx shell layout g plt f
  • 春季启动。如何禁用 JPA 有条件初始化

    如果可以完全禁用 JPA Stack 的初始化 我会很伤心 在某些情况下 我的应用程序是在无法访问数据库的环境中执行的 应用程序可以在应用程序级别上幸存下来 但从技术上讲 我在数据源的初始化方面遇到了一些异常 必须有某种方法来完全禁用 JP
  • scala 中的reduceLeft(或foldLeft)与reduceRight(或foldRight)

    我正在从 coursera 学习 scala 在里面reduceLeft and reduceRight描述如下 然后在下一张幻灯片上 老师说这个代码模式被抽象为reduceLeft 我的问题 我认为第一张幻灯片中的模式是reduceRig
  • 寻找包含当前节点的 jQuery find(..) 方法

    jQueryfind http api jquery com find 遍历方法不包括当前节点 它从当前节点的子节点开始 调用将当前节点包含在其匹配算法中的查找操作的最佳方法是什么 浏览文档并没有立即引起我的注意 对于 jQuery 1 8
  • Symfony2 php.ini

    当检查时app check php Symfony2说这个Configuration file used by PHP etc php5 cli php ini然而phpinfo 显示 Apache 正在使用 etc php5 apache
  • 如何让两个模型互相引用 Django

    我有以下代码 class Game models Model title models CharField max length 50 summery models CharField max length 500 key models I
  • Laravel 5 将数据从中间件传递到控制器

    我的中间件类似于Auth 它检查 URL 模式 例如 rest 然后在请求中查找令牌 从数据库中检索其相应的用户 之后 我想将该用户保存在一个变量中 以便稍后可以在以下任何控制器中返回该用户 最好的办法是什么 中间件 public func
  • LINQ 删除重复项和结果项以获得数量总和

    我只是想检查是否有更快的方法使用 LINQ 通过 id 从重复项中删除列表 但在结果列表项中将具有一些其他属性的总和 在本例中为价格 例如 起始列表 List
  • 通过 Open Graph API 以编程方式创建 Facebook 页面

    我希望有一种方法可以使用开放图 API 创建 Facebook 页面 该文档仅显示页面存在后我可以进行的 API 调用 目前 我的网站上有电影简介 我想在 Facebook 上为每个电影简介创建一个页面 我知道我可以添加 赞 按钮 一旦单击
  • @Transactional 和 AOP 之间的混淆

    Transactional 是否在 Spring 3 中替代了 AOP 它们相同吗 我可以说 Transactional在内部实现了AOP吗 The Transactionnal注释只是声明方法 或类的所有方法 是事务性的简单方法 Spri
  • 检测 MATLAB 帮助浏览器

    我想为大型 MATLAB 应用程序创建一些 HTML 文档 主要在 MATLAB 帮助浏览器 从 11b 开始的任何版本的 MATLAB 中 查看 这将有一些自定义 CSS 但没有什么非常复杂的 但是 我还希望在其他浏览器中可以查看相同的文
  • 如何创建一个 numpy 数组来描述三角形的顶点?

    我喜欢使用 Numpy 创建要传递到的顶点数组glsl Vertices将是一个包含 3 个顶点信息的 numpy 数组 Each vertex包括 pos x y 具有 32 位的 64 位有符号浮点格式 R 分量位于字节 0 3 中 3
  • 如何查看SQL Server 2008中表空间的总使用量?

    在 SQL server 2008 中 我如何 通过 SQL 查询 找到 SQL Server 2008 R2 的特定实例 或所有实例 的表空间使用百分比 另外 获取 SQL Server 的所有命名实例的列表的最佳方法 查询 是什么 这是
  • 如何在我的开发环境中管理多个版本的 Scala 和 SBT?

    我刚刚完成了很棒的 Coursera Scala 课程 并渴望通过探索一些现有的开源项目来继续了解有关 Scala 的更多信息 不过 我在尝试让其中一些在本地运行时遇到了障碍 我有 Ruby 背景 我们使用诸如rvm or rbenv在一个
  • Android 形状背景

    是否可以在 xml 中绘制一个形状 并使用 png 作为该形状的背景 我已经有了形状 它是一个带圆角的正方形 我想为该正方形添加背景 是的 您可以使用任何形状文件作为任何视图的背景 此示例创建圆形背景 形状周围有白色和黑色边框 样本 圆角
  • 护照验证不重定向

    我正在编写一个本地注册策略 发现它不起作用 所以我退后一步 尝试对我的空集合进行身份验证 每次我提交表单都会花费大约 30 40 秒的时间 直到导致超时 我确保调用了 Passport authenticate 但似乎它没有执行任何重定向
  • 在 Android 中初始化 Firebase crashlytics

    我已在我的 Android 项目中将 Fabric Crashlytics 迁移到 Firebase Crashlytics 在使用织物时 在活动课上我使用了以下线 Fabric with this new Crashlytics 但迁移后
  • 在 Java 7 和 8 中创建与现有列表不同的列表?

    如果我有 List
  • 如何使用 symfony 2.3 在 WebTestCase 中提交无效的选择选项

    我正在尝试在 symfony 2 3 中测试一个表单 该表单具有选择输入 以及文件上传 enctype multipart form data 选择输入如下 这是必填字段 有 3 个选项 1 2 3 使用 DomCrawler 我选择表单