| ์ง๋ฌธ | ใ
| ---------------- | ------
| ๋ฒ๊ทธ ๋ณด๊ณ ? | ์๋์
| ๊ธฐ๋ฅ ์์ฒญ? | ๋ค
| BC ๋ธ๋ ์ดํฌ ๋ฆฌํฌํธ? | ์๋์
| RFC? | ์๋์
| ์ฌํฌ๋ ๋ฒ์ | 3.3.0
๊ฐ์ฒด๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ญ์ง๋ ฌํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์
๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง๋๋ค.
class User
{
/**
* Set Name.
*
* <strong i="15">@param</strong> Name $name
*/
public function setName(Name $name) : self
{
$this->name = $name;
return $this;
}
}
์ง๋ ฌ ๋ณํ๊ธฐ๋ Name
์์ ๋น์ ๊ทํ๋ฅผ ์คํํ๋ ๋์ setName()
์ ๋ฐฐ์ด์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ "'์ด๋ฆ' ์ ํ์ ์์ ์ธ์, '๋ฐฐ์ด'์ด ์ ๊ณต๋จ"์ด๋ผ๋ ๋ฉ์์ง์ ํจ๊ป Symfony\Component\Serializer\Exception\UnexpectedValueException
๋ฅผ ๋ฐ์์ํต๋๋ค. Name
ํด๋์ค๋ฅผ ๋ง๋ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ setName()
์ ์ ๋ฌํฉ๋๋ค.๋ฌผ๋ก ์ด ๋ฉ์๋๊ฐ Name ๋ฐ array๋ฅผ ํ์ฉํ๋๋ก ํ ์ ์์ง๋ง ๋ค์์ ๋ฌด์ํฉ๋๋ค.
1) ๊ธฐ์กด ์ด๋ฆ ๊ฐ์ฒด ์ฑ์ฐ๊ธฐ
2) ์ก์ธ์ค์ ์ฌ์ฉ๋ ์ ์๋ ๋ชจ๋ ๊ทธ๋ฃน.
์ด ๋ฉ์๋๋ ์ด๋ฏธ ๋ฐ์๋ค์ผ ์ ์๋ ์ ์ผํ ๊ฒ(ํด๋์ค)์ ํ์
ํํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋น ์ค์นผ๋ผ ํ์
ํํธ๊ฐ setter์์ ๋ฐ๊ฒฌ๋๋ฉด ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
1) ์ ํ ํํธ ํด๋์ค๋ฅผ ์ ํ์ผ๋ก ์ฌ์ฉํ์ฌ ๋น์ ๊ทํ ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค.
2) ๋์ผํ ๊ทธ๋ฃน์ ๋ถ๋ชจ์์ ์์์ผ๋ก ์ ๋ฌ
3) ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํฉ๋๋ค. ๊ฐ์ด ๋ฐํ๋๋ฉด object_to_populate
์ ํด๋น ๊ฐ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค( object_to_populate
๊ฐ ์์ ํญ๋ชฉ์ ์ค์ ๋์๋ค๊ณ ๊ฐ์ ).
๊ธ์, ์ด๊ฒ์ ์ฆ์ ๋ถ๋ช
ํ์ง ์์์ง๋ง ๋๋ ์ด๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
https://github.com/symfony/symfony/blob/3.2/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml#L25
๊ทธ๋ฌ๋ฉด ProperyInfo ๊ตฌ์ฑ ์์ ๋ฅผ ์ค์นํ๊ณ config.yml
์์ ํ์ฑํํ ์ ์์ต๋๋ค.
framework:
property_info:
enabled: true
์ด๊ฒ์ _๋๋ถ๋ถ_ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ฌ๊ท๋ฅผ ์ง์ํ๊ณ ๊ทธ๋ฃน์ ์ง์ํ์ง๋ง object_to_populate
๋ ์ง์ํ์ง ์์ต๋๋ค . ๋๋ ์ด ๋ฌธ์ ๋ฅผ Symfony๊ฐ ๋ช
ํํ๊ฒ ์ง์ํ๋ ์ฌ๊ท ์์ฒด๋ณด๋ค๋ ๊ทธ์ ๊ดํ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ ๊ฒ์
๋๋ค(๋น๋ก ๋ฌธ์ํ๋์ง๋ ์์์ง๋ง).
ํฌํจ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ง๋ ฌํํ๊ธฐ ์ํด PropertyInfo๋ฅผ ํ์ฑํํด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ๋ถ์กฑํฉ๋๋ค. ์ด์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด๋ฏธ ๊ฒ์ํ์ต๋๋ค: https://github.com/symfony/symfony-docs/issues/7387
์ธ ๋ฒ์งธ ๋ฌธ์ (์ง๊ธ์ ์ ์ผํ ๋ฌธ์ )์ ๋ํด object_to_populate๋ ์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธ/์ฌ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ถ๋ชจ๊ฐ ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด ํฌํจ๋ ๊ฐ์ฒด๋ ์ด ์ต์ ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค. ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ฑ ๊ฐ์ผ๋ก ์ฌ์ฉํ ํ์๊ฐ ์์์ ์ ์ ์์ง๋ง ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@davidbarratt ์ ์๊ฒฌ์ PropertyInfoComponent
\DateTime
์์ฑ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ญ์ง๋ ฌํํ ์ ์๋๋ก Serializer์ ๋ํ framework.property_info.enabled
๊ตฌ์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค. ์ด๊ฒ์ ์ง๋ ฌํ์ ํ์ํ์ง ์์ผ๋ฉฐ ๊ทธ๊ฒ์ ์ธ๊ธํ๋ ๋ฌธ์์์ ์๋ฌด ๊ฒ๋ ์ฐพ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์์ผ๋ฉด \DateTime
์์ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ๋ ๊ฒ์ ์๋ํ์ง๋ง ์งํ์ ์ญ์ง๋ ฌํํ๋ ๊ฒ์ ์คํจํฉ๋๋ค. \DateTime
์์ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ _๋ฐ ์ญ์ง๋ ฌํ _ํ๋ ๊ฒ์ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ข์ ๊ณผ ๊ด๋์ ์ธํฐ๋ท ๊ฒ์์ ์ค์ด๊ธฐ ์ํด ๋ฌธ์์์ ์ด๋ฅผ ์ธ๊ธํ ๊ฒ์ ์ ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ธ์, ์ด๊ฒ์ ์ฆ์ ๋ถ๋ช ํ์ง ์์์ง๋ง ๋๋ ์ด๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
https://github.com/symfony/symfony/blob/3.2/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml#L25
๊ทธ๋ฌ๋ฉด ProperyInfo ๊ตฌ์ฑ ์์ ๋ฅผ ์ค์นํ๊ณ
config.yml
์์ ํ์ฑํํ ์ ์์ต๋๋ค.์ด๊ฒ์ _๋๋ถ๋ถ_ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ฌ๊ท๋ฅผ ์ง์ํ๊ณ ๊ทธ๋ฃน์ ์ง์ํ์ง๋ง
object_to_populate
๋ ์ง์ํ์ง ์์ต๋๋ค . ๋๋ ์ด ๋ฌธ์ ๋ฅผ Symfony๊ฐ ๋ช ํํ๊ฒ ์ง์ํ๋ ์ฌ๊ท ์์ฒด๋ณด๋ค๋ ๊ทธ์ ๊ดํ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ ๊ฒ์ ๋๋ค(๋น๋ก ๋ฌธ์ํ๋์ง๋ ์์์ง๋ง).