다른 사용자 정의 엔티티와 함께 사용되어야하는 번들을 작성 중입니다. 이 번들이 해당 엔터티의 사용자 제공 필드에 액세스 할 수 있기를 바랍니다.
다음과 같은 방법이 $entity->set('field', 'value')
있습니까? 리플렉션을 사용하여 처음부터해야합니까?
내가 이미 생각 해낸 것 :
컨트롤러에서 :
public function editAction(Request $request) {
$content = $request->request->get('content'); // Example: "John Doe"
$entity = $request->request->get('entity'); // Example: "SomeBundle:SomeEntity"
$field = $request->request->get('field'); // Example: "name"
$id = $request->request->get('id'); // Example: "42"
$em = $this->getDoctrine()->getManager();
$element = $em->getRepository($entity)->find($id); // Entity with id 42
// How can I write this line?:
$element->set($field, $content); //Alias for $element->setName($content);
// ...
}
이 작업을 수행 할 수있는 Property Accessor 구성 요소를 사용할 수 있습니다 . 개체, 필드 이름 및 설정할 값을 제공하기 만하면 구성 요소가 나머지 (pubic 속성, _set 또는 setter)를 처리합니다.
use Symfony\Component\PropertyAccess\PropertyAccess;
// ...
$value = $request->get('value');
$em = $this->getDoctrine()->getManager();
$element = $em->getRepository($entity)->find($id); // Entity with id 42
$accessor = PropertyAccess::createPropertyAccessor();
if ($accessor->isWritable($element, 'fieldName')) {
$accessor->setValue($element, 'fieldName', $value);
} else {
throw new \Exception('fieldName is not writable');
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다