如何使用 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 中提交无效的选择选项 的相关文章

  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • 检查 PHP 中“@”字符后面的单词

    我现在正在制作一个新闻和评论系统 但是我已经在一个部分上停留了一段时间了 我希望用户能够在 Twitter 上引用其他玩家的风格 例如 用户名 该脚本看起来像这样 不是真正的 PHP 只是想象脚本 3 string I loved the
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • 如何在 Symfony2 WebTestCase 中重定向后获取当前 URL?

    使用 Symfony2 WebTestCase 我进行了以下测试 client gt request GET this gt assertTrue client gt getResponse instanceof RedirectRespo
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 从 smarty 访问 PHP 文件的变量(本地或全局)

    我有一个 php 文件 其中包含一些本地和全局变量 例如 foo 从此文件中调用 smarty 对象 如何在不更改 PHP 文件的情况下从 smarty 脚本访问 foo Thanks 如果你有一个名为 BASE 的常量变量 并且定义如下
  • Calendly 未在 Webflow 中预填写表单

    我在 Webflow 项目中使用 Calendly 并且它有效 不过 我想在 Calendly 中预先填写表格 这里有一个指南 https help calendly com hc en us articles 226766767 Pre
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • PHPUnit 在 IDE 中工作,但服务器说找不到类

    我在 PhpStorm 中使用 Symfony3 插件 我的 PHP 解释器是 7 0 18 我在 PhpStorm 中配置了 PHPUnit 6 3 0 phar文件位于我的项目的根目录中 单元测试就像 IDE 中的魅力一样工作 但在服务
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito

随机推荐

  • 投影 - 将 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 我选择表单