c01347fd38
This PR was squashed before being merged into the 4.3-dev branch (closes #30482). Discussion ---------- [Mime] Fix support for date form parts | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes | New feature? | yes <!-- don't forget to update src/**/CHANGELOG.md files --> | BC breaks? | no <!-- see https://symfony.com/bc --> | Deprecations? | no <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | n/a | License | MIT | Doc PR | n/a <!-- Write a short README entry for your feature/bugfix here (replace this comment block.) This will help people understand your PR and can be used as a start of the Doc PR. Additionally: - Bug fixes must be submitted against the lowest branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too). - Features and deprecations must be submitted against the master branch. --> Commits -------5c8a4e3deb
[Mime] removed the 2 parts constraints on Multipart (not true for DataFormPart for instance)0450c4f244
[Mime] fixed support for date form parts
88 lines
2.0 KiB
PHP
88 lines
2.0 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Mime\Part;
|
|
|
|
use Symfony\Component\Mime\Header\Headers;
|
|
|
|
/**
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* @experimental in 4.3
|
|
*/
|
|
abstract class AbstractMultipartPart extends AbstractPart
|
|
{
|
|
private $boundary;
|
|
private $parts = [];
|
|
|
|
public function __construct(AbstractPart ...$parts)
|
|
{
|
|
parent::__construct();
|
|
|
|
foreach ($parts as $part) {
|
|
$this->parts[] = $part;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return AbstractPart[]
|
|
*/
|
|
public function getParts(): array
|
|
{
|
|
return $this->parts;
|
|
}
|
|
|
|
public function getMediaType(): string
|
|
{
|
|
return 'multipart';
|
|
}
|
|
|
|
public function getPreparedHeaders(): Headers
|
|
{
|
|
$headers = parent::getPreparedHeaders();
|
|
$headers->setHeaderParameter('Content-Type', 'boundary', $this->getBoundary());
|
|
|
|
return $headers;
|
|
}
|
|
|
|
public function bodyToString(): string
|
|
{
|
|
$parts = $this->getParts();
|
|
$string = '';
|
|
foreach ($parts as $part) {
|
|
$string .= '--'.$this->getBoundary()."\r\n".$part->toString()."\r\n";
|
|
}
|
|
$string .= '--'.$this->getBoundary()."--\r\n";
|
|
|
|
return $string;
|
|
}
|
|
|
|
public function bodyToIterable(): iterable
|
|
{
|
|
$parts = $this->getParts();
|
|
foreach ($parts as $part) {
|
|
yield '--'.$this->getBoundary()."\r\n";
|
|
yield from $part->toIterable();
|
|
yield "\r\n";
|
|
}
|
|
yield '--'.$this->getBoundary()."--\r\n";
|
|
}
|
|
|
|
private function getBoundary(): string
|
|
{
|
|
if (null === $this->boundary) {
|
|
$this->boundary = '_=_symfony_'.time().'_'.bin2hex(random_bytes(16)).'_=_';
|
|
}
|
|
|
|
return $this->boundary;
|
|
}
|
|
}
|