这是在CakePhp3中创建和发布多表单数据的正确方法吗?

时间:2018-09-27 16:49:59

标签: cakephp

我正在尝试在CakePhp3中发布多部分表单数据。该表单应包含有关用户的一些信息(文本字段)和图像。

我正在做这样的事情:

<xsl:variable name="asn" select="asn_name"/>

这是在CakePhp3中创建和发布多表单数据的正确方法吗?

感谢您的帮助。

编辑

如果我发布到自己的服务器上,它似乎可以正常工作(感谢@Mary),但是我得到的名字和姓氏被复制了(这可能是问题所在):

<xsl:if asn="AHE">Professional Membership Groups</xsl:if>
<xsl:if asn="ACHI">Other Individual Membership Organizations</xsl:if>

如果我发布到API服务器不起作用。 我对CURL进行了同样的操作,并且有效:

$request = [
  'fistname'=>$user->firstname,
  'lastname'=>'$user->lastname',
  '_session'=>'$session'
];

$form = new FormData();
foreach ($request as $key => $value) {
  $form->add($key,$request);
}
$file = $form->addFile('upload',fopen(WWW_ROOT.'img/picture.png','r'));
$file->contentId('mypicture'); // <-- not sure what this is
$file->disposition('attachment');

$response = $http->post(
  $url,
  (string)$form,
  ['headers' => ['Content-Type' => $form->contentType()]]
);

1 个答案:

答案 0 :(得分:1)

反问:能奏效吗?

如您在此处看到的,$file->contentId()设置Content ID或多部分表单数据请求正文中的部分:
https://github.com/cakephp/cakephp/blob/master/src/Http/Client/FormDataPart.php#L114

我不确定这一点,但是我认为您不必设置它,因为multipart/form-data似乎不需要它:
https://www.w3.org/TR/2006/REC-xforms-20060314/slice11.html#serialize-form-data


修改
我做了一些测试,然后:作品。这是我尝试过的:

use Cake\Http\Client;
use Cake\Http\Client\FormData;

public function test() {

    $request = [
        'fistname'=>'Test',
        'lastname'=>'Test'
    ];

    $form = new FormData();
    $http = new Client();

    foreach ($request as $key => $value) {
        $form->add($key,$request);
    }
    $file = $form->addFile('upload',fopen(WWW_ROOT.'img/awards.png','r'));
    $file->contentId('mypicture'); // <-- not sure what this is
    $file->disposition('attachment');

    $response = $http->post(
      'http://www.testurl.dev/test',
      (string)$form,
      ['headers' => ['Content-Type' => $form->contentType()]]
    );
    var_dump($response);
    exit;
}

var_dump($response)的输出:

object(Cake\Http\Client\Response)#150 (12) {
  ["code":protected]=>int(200)
  …
  ["headers":protected]=>array(12) {
    ["Date"]=>array(1) {
      [0]=>string(29) "Fri, 28 Sep 2018 12:44:31 GMT"
    }
    …
  }
}

服务器访问日志输出:

[28/Sep/2018:14:44:31 +0200] "POST /test HTTP/1.1" 200 6852 "-" "CakePHP"