나는 작은 문제 심포니와 collectiontype을 만들 ..이 같은 null를 돌려 내가 http://symfony.com/doc/current/cookbook/form/form_collections.html 또는 http://toni.uebernickel.info/2012/03/15/an-example-of-symfony2-collectiontype-form-field-prototype.html ...Symfony3 CollectionType는 데이터
하지만 항상 같은 결과와 마찬가지로, 여러 튜토리얼을 따라하려고 노력
.
$tags = $form->get('tags')->getData();
을 반환합니다. 내가/추가를 생성 링크를 제거 할 수있어 및 색인 aswell 작업,하지만 컨트롤러에 데이터를 얻고있다
...
나는 중요한 뭔가를 누락되거나 잘못된 일을하고 있습니까? 누군가가 나를 도와 주거나 팁을 줄 수 있기를 바랍니다.나는 현재
작업 개체
/**
* @ORM\OneToMany(targetEntity="Tag", mappedBy="task",
cascade={"persist", "remove"})
*/protected $tags;
태그 엔티티
/**
* @ORM\ManyToOne(targetEntity="Task", inversedBy="tags")
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
*/
protected $task;
TaskType
을 가지고있는 0->add('tags', CollectionType::class, array(
'entry_type' => TagType::class,
'allow_add' => true,
'allow_delete' => true,
'prototype_name' => '__tag__name__',))
TAGTYPE
$builder->add('name', TextType::class, array()));
나뭇
{% macro widget_prototype(widget, remove_text) %}
{% if widget.vars.prototype is defined %}
{% set form = widget.vars.prototype %}
{% set name = widget.vars.prototype.vars.name %}
{% else %}
{% set form = widget %}
{% set name = widget.vars.full_name %}
{% endif %}
<div data-content="{{ name }}">
<a class="btn-remove" data-related="{{ name }}">{{ remove_text }}</a>
{{ form_widget(form) }}
</div>
{% endmacro %}
매크로
<div id="post_tags" data-prototype="{{ _self.widget_prototype(form.tags, 'Remove tag')|escape }}">
{% for widget in form.tags.children %}
{{ _self.widget_prototype(widget, 'Remove tag') }}
{% endfor %}
</div>
<a class="btn-add" data-target="post_tags">Add tag</a>
JS
jQuery(function($) {
$(document).on('click', '.btn-add[data-target]', function(event) {
var collectionHolder = $('#' + $(this).attr('data-target'));
if (!collectionHolder.attr('data-counter')) {
collectionHolder.attr('data-counter', collectionHolder.children().length);
}
var prototype = collectionHolder.attr('data-prototype');
var form = prototype.replace(/__tag__name__/g, collectionHolder.attr('data-counter'));
collectionHolder.attr('data-counter', Number(collectionHolder.attr('data-counter')) + 1);
collectionHolder.append(form);
event && event.preventDefault();
});
$(document).on('click', '.btn-remove[data-related]', function(event) {
var name = $(this).attr('data-related');
$('*[data-content="'+name+'"]').remove();
event && event.preventDefault();
});
});
및 컨트롤러
$form = $this->createForm(TaskType::class, $task);
EDIT/UPDATE
태그에 대한작업 엔티티 세터와 게터
public function __construct()
{
$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
public function add(Tag $tag)
{
$this->tags[] = $tag;
return $this;
}
public function removeTag(Tag $tag)
{
$this->tags->removeElement($tag);
}
public function getTags()
{
return $this->tags;
}
컨트롤러에 :
$task = new Task();
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if($form->isValid()){
$tags = $form->get('tags')->getData();
foreach($tags as $tag){
//Here var_dump, echo, print, array_push etc tricks = empty
}
//Also without foreach var_dump = empty
}
Task 엔터티에 getter 및 setters (태그 용)를 표시하십시오. – galeaspablo
전체 컨트롤러를 게시 할 수 있습니까, 아니면 적어도 태그 데이터를 가져 오려고하는 관련 부분을 게시 할 수 있습니까? – DonCallisto
업데이트 된 질문, getters 및 setters는 PHP bin/console로 생성됩니다. doctrine : generate : entities - command – Degu