【问题标题】:How to submit a form to Symfony2 from a non-Symfony2 site如何从非 Symfony2 站点向 Symfony2 提交表单
【发布时间】:2014-10-21 01:03:39
【问题描述】:

我正在构建一个移动网络应用程序,该应用程序从我构建的 Symfony2 应用程序中获取信息。用户必须提交一个表单才能查看信息,但是当我通过 AJAX 提交表单时,处理它的控制器看不到正在提交的表单。

移动应用程序是使用 Cordova 构建的,因此表单源自静态 HTML 表单。一旦通过 AJAX 提交,它将返回所需的数据。然而,表单提交很好,触发了 AJAX 来做它的魔法,但 Symfony2 没有看到正在提交的表单。我在$request = $this->getRequest(); 上做了一个var_dump,表格不包括在这里。这是转储:

对象(Symfony\Component\HttpFoundation\Request)#6 (20) { [“属性”]=> 对象(Symfony\Component\HttpFoundation\ParameterBag)#9 (1) { [“参数”:受保护]=>数组(3){[“_控制器”]=>字符串(60) “CWWA\CoreBundle\Controller\AjaxController::getscheduleAction” ["_route"]=> 字符串(17) "ajax_get_schedule" ["_route_params"]=> 数组(0){ } } } [“请求”]=> 对象(Symfony\Component\HttpFoundation\ParameterBag)#7 (1) { [“参数”:受保护]=> 数组(0){ } } [“查询”]=> 对象(Symfony\Component\HttpFoundation\ParameterBag)#8 (1) { [“参数”:受保护]=> 数组(0){ } } [“服务器”]=> 对象(Symfony\Component\HttpFoundation\ServerBag)#12 (1) { [“参数”:受保护]=> 数组(35){ [“基础”]=> 字符串(9) "/cwwa/web" ["CONTENT_LENGTH"]=> 字符串(2) "70" ["CONTENT_TYPE"]=> 字符串(31)“应用程序/json;字符集=UTF-8”[“DOCUMENT_ROOT”]=> 字符串(8) "/var/www" ["GATEWAY_INTERFACE"]=> 字符串(7) "CGI/1.1" ["HTTP_ACCEPT"]=> string(46) "应用程序/json, text/javascript, /; q=0.01" ["HTTP_ACCEPT_ENCODING"]=> 字符串(13) "gzip,放气" ["HTTP_ACCEPT_LANGUAGE"]=> 字符串(14) "en-gb,en;q=0.5" ["HTTP_CACHE_CONTROL"]=> 字符串(8) "无缓存" ["HTTP_CONNECTION"]=> 字符串(10)“保持活力”[“HTTP_COOKIE”]=>字符串(36) "PHPSESSID=lvfqh6hcdampcah8mi93il6922" ["HTTP_HOST"]=> 字符串(9) "domain.com" ["HTTP_PRAGMA"]=> 字符串(8) "no-cache" ["HTTP_REFERER"]=> 字符串(26)“http://domain.com/cwwa-app/”[“HTTP_USER_AGENT”]=> 字符串(85)“Mozilla/5.0(X11;Linux x86_64;rv:24.0)壁虎/20140722 Firefox/24.0 Iceweasel/24.7.0" ["PATH"]=> 字符串(13) "/bin:/usr/bin" ["PATH_INFO"]=> 字符串(22) "/ajax/client/schedule/" ["PATH_TRANSLATED"]=> 字符串(29) "/var/www/cwwa/web/app_dev.php" ["QUERY_STRING"]=> 字符串(0) "" ["REDIRECT_STATUS"]=> 字符串(3) "200" ["REMOTE_ADDR"]=> 字符串(3) "::1" ["REMOTE_PORT"]=> 字符串(5) "33568" ["REQUEST_METHOD"]=> 字符串(4) "POST" ["REQUEST_URI"]=> 字符串(43) "/cwwa/web/app_dev.php/ajax/client/schedule/" ["SCRIPT_FILENAME"]=> 字符串(29)“/var/www/cwwa/web/app_dev.php”[“SCRIPT_NAME”]=> 字符串(21) "/cwwa/web/app_dev.php" ["SERVER_ADDR"]=> 字符串(3) "::1" ["SERVER_ADMIN"]=> 字符串(19) "webmaster@localhost" ["SERVER_NAME"]=> 字符串(9)“本地主机”[“服务器端口”]=>字符串(2)“80” ["SERVER_PROTOCOL"]=> 字符串(8) "HTTP/1.1" ["SERVER_SIGNATURE"]=> string(70) " Apache/2.2.22 (Debian) 服务器在 localhost 端口 80 " ["SERVER_SOFTWARE"]=> 字符串(22) "Apache/2.2.22 (Debian)" ["PHP_SELF"]=> 字符串(43) "/cwwa/web/app_dev.php/ajax/client/schedule/" ["REQUEST_TIME"]=> int(1409142446) } } [“文件”]=> 对象(Symfony\Component\HttpFoundation\FileBag)#11 (1) { [“参数”:受保护]=> 数组(0){ } } [“cookies”]=> 对象(Symfony\Component\HttpFoundation\ParameterBag)#10 (1) { [“参数”:受保护]=> 数组(1){ [“PHPSESSID”]=> 字符串(26) “lvfqh6hcdampcah8mi93il6922”}}[“标题”]=> 对象(Symfony\Component\HttpFoundation\HeaderBag)#13 (2) { ["headers":protected]=> array(13) { ["content-length"]=> array(1) { [0]=> 字符串(2)“70”} [“内容类型”]=> 数组(1){ [0]=> 字符串(31) "应用程序/json; charset=UTF-8" } ["接受"]=> 数组 (1) { [0]=> 字符串(46)“应用程序/json,文本/javascript,/;q=0.01”} ["接受编码"]=> 数组(1) { [0]=> 字符串(13) "gzip, deflate" } ["接受语言"]=> 数组(1) { [0]=> 字符串(14) "en-gb,en;q=0.5" } [“缓存控制”]=> 数组(1){ [0]=> 字符串(8)“无缓存”} ["connection"]=> array(1) { [0]=> string(10) "keep-alive" } ["cookie"]=> 数组(1) { [0]=> 字符串(36) "PHPSESSID=lvfqh6hcdampcah8mi93il6922" } ["主机"]=> 数组 (1) { [0]=> string(9) "localhost" } ["pragma"]=> array(1) { [0]=> string(8) “无缓存”} [“referer”]=> 数组(1){ [0]=> 字符串(26) "http://domain.com/cwwa-app/" } ["user-agent"]=> 数组(1) { [0]=> 字符串(85)“Mozilla/5.0(X11;Linux x86_64;rv:24.0)壁虎/20140722 Firefox/24.0 Iceweasel/24.7.0" } ["x-php-ob-level"]=> 数组(1) { [0]=> int(1) } } ["cacheControl":protected]=> array(1) { ["no-cache"]=> bool(true) } } ["content":protected]=> NULL ["languages":protected]=> NULL ["charsets":protected]=> NULL ["acceptableContentTypes":protected]=> NULL ["pathInfo":protected]=> string(22) "/ajax/client/schedule/" ["requestUri":protected]=> 字符串(43)“/cwwa/web/app_dev.php/ajax/client/schedule/” ["baseUrl":protected]=> 字符串(21) "/cwwa/web/app_dev.php" ["basePath":protected]=> NULL ["method":protected]=> string(4) "POST" [“格式”:受保护]=> NULL [“会话”:受保护]=> 对象(Symfony\Component\HttpFoundation\Session\Session)#67 (3) { [“存储”:受保护]=> 对象(Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage)#66 (5) { ["bags":protected]=> 数组(2) { ["attributes"]=> 对象(Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag)#62 (3) { ["name":"Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag":private]=> 字符串(10)“属性” ["storageKey":"Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag":private]=> 字符串(15)“_sf2_attributes”[“属性”:受保护]=>数组(0){}} [“闪烁”]=> 对象(Symfony\Component\HttpFoundation\Session\Flash\FlashBag)#61 (3) { ["name":"Symfony\Component\HttpFoundation\Session\Flash\FlashBag":private]=> 字符串(7)“闪烁” ["闪烁":"Symfony\Component\HttpFoundation\Session\Flash\FlashBag":private]=> 数组(0){} ["storageKey":"Symfony\Component\HttpFoundation\Session\Flash\FlashBag":private]=> 字符串(12)“_sf2_flashes”}}[“开始”:受保护]=>布尔(假) ["已关闭":protected]=> bool(false) ["saveHandler":protected]=> 对象(Symfony\Component\HttpFoundation\Session\Storage\Proxy\NativeProxy)#63 (3) { ["wrapper":protected]=> bool(false) ["active":protected]=> bool(false) ["saveHandlerName":protected]=> string(5) "files" } [“元数据包”:受保护]=> 对象(Symfony\Component\HttpFoundation\Session\Storage\MetadataBag)#64 (4) { ["名称":"Symfony\Component\HttpFoundation\Session\Storage\MetadataBag":private]=> 字符串(10)“__元数据” ["storageKey":"Symfony\Component\HttpFoundation\Session\Storage\MetadataBag":private]=> string(9) "_sf2_meta" ["meta":protected]=> 数组(3) { ["c"]=> int(0) ["u"]=> int(0) ["l"]=> int(0) } ["lastUsed":"Symfony\Component\HttpFoundation\Session\Storage\MetadataBag":private]=> 空值 } } ["flashName":"Symfony\Component\HttpFoundation\Session\Session":private]=> 字符串(7)“闪烁” ["attributeName":"Symfony\Component\HttpFoundation\Session\Session":private]=> 字符串(10)“属性”} [“语言环境”:受保护]=> NULL ["defaultLocale":protected]=> string(2) "en" }

HTML 表单是这样的:

        <form method="post" name="scf" id="scheduleChangeForm" action="http://localhost/cwwa/web/app_dev.php/ajax/client/schedule/">
            <input type="hidden" id="scheduleChangeCustomer" class="form-control" name="scf[customer]" />
            <select id="divisionSelect" class="form-control" name="scf[division]">
                <option>All Divisions</option>
            </select>
            <select id="siteSelect" class="form-control siteDivSelect" name="scf[site]">
                <option>All Sites</option>
            </select>
            <button type="submit" class="btn btn-primary btn-go" id="chSBtn">Submit <i class="fa fa-arrow-circle-right"></i></button>
        </form>

而 AJAX 是这样的:

var scf = $('#scheduleChangeForm');

scf.submit(function(){

    $.ajax({
        type: scf.attr('method'),
        url: scf.attr('action'),
        dataType: 'json',
        crossDomain: true,
        contentType: 'application/json',
        data: scf.serialize(),
        success: function(data) {
            // Deals with a successful AJAX submit
        }
    });
});

编辑
我在控制器中添加了以下代码:

$content = $this->get("request")->getContent();
print_r($content);

这返回了以下内容:

scf%5Bcustomer%5D=1&scf%5Bdivision%5D=Circom+Managed&scf%5Bsite%5D=633

所以表单正在提交给请求,但不确定为什么会这样显示。

【问题讨论】:

  • 控制器代码是什么?
  • 你应该使用$content = $this-&gt;get("request")-&gt;request-&gt;all()进行调试
  • 感谢我的兄弟 +1

标签: php ajax forms symfony


【解决方案1】:

我想你可能需要一个 csrf 令牌?

【讨论】:

  • 我在 config.yml 中禁用了 CSRF,但它似乎仍然不起作用?
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2014-02-03
  • 2014-02-07
  • 2014-09-12
  • 2014-06-28
  • 1970-01-01
  • 2014-09-04
相关资源
最近更新 更多