我正在尝试在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()]]
);
答案 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"