подскажите пожалуйста, интегрировал функцию edit из документации по Form Collections из (http://symfony.com/doc/current/form/form_collections.html)
Есть Entity(Ability) с набором полей которые нужно редактировать массово, куча импутов и одна кнопка "сохранить", в сущности прописаны все геттеры и сеттеры В форме сущности EntityType(AbilityType) у меня выводятся поля choice type все сделанно как надо и работает по отдельности, с этим проблем нет, начал делать по примеру из документации, сделал в папке Entity
AbilityHolder.php
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="AbilityHolder")
*/
class AbilityHolder
{
protected $abilitys;
public function __construct()
{
$this->abilitys = new ArrayCollection();
}
public function getAbilitys()
{
return $this->abilitys;
}
}
к нему сделал
AbilityHolderType.php
<?php
namespace App\Form;
use App\Entity\AbilityHolder;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
class AbilityHolderType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('abilitys', CollectionType::class, array(
'entry_type' => AbilityType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => AbilityHolder::class,
]);
}
}
в твиговом файле прописал с примера шаблон(для новой записи все работает)
{# ... #}
{{ form_start(form) }}
{# render the task's only field: description #}
<ul class="abilitys">
{# iterate over each existing tag and render its only field: name #}
{% for ability in form.abilitys %}
<li>{{ form_row(ability.idItem) }}</li>
<li>{{ form_row(ability.code) }}</li>
<li>{{ form_row(ability.reloadTime) }}</li>
<li>{{ form_row(ability.durationTime) }}</li>
<li>{{ form_row(ability.idAbilityType) }}</li>
{% endfor %}
</ul>
{{ form_end(form) }}
{# ... #}
и сам контроллер с функцией New и Edit
<?php
namespace App\Controller;
use App\Entity\AbilityHolder;
use App\Entity\Ability;
use App\Form\AbilityHolderType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Common\Collections\ArrayCollection;
use App\Controller\EntityManagerInterface;
/**
* @Route("/ability-holder")
*/
class AbilityHolderController extends Controller
{
/**
* @Route("/new", name="ability_new", methods="GET|POST")
*/
public function new(Request $request)
{
$abilitys = new AbilityHolder();
$ability1 = new Ability();
$ability1->setIdItem('1');
$ability1->setCode('code');
$ability1->setReloadTime('1');
$ability1->setDurationTime('1');
$ability1->setIdAbilityType('1');
// dummy code - this is here just so that the Ability has some tags
// otherwise, this isn't an interesting example
$abilitys->getAbilitys()->add($ability1);
// end dummy code
$form = $this->createForm(AbilityHolderType::class, $abilitys);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// ... maybe do some form processing, like saving the Ability and Tag objects
}
return $this->render('ability/new-holder.html.twig', array(
'form' => $form->createView(),
));
}
/**
* @Route("/edit", name="ability_edit", methods="GET|POST")
*/
public function edit($id, Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
if (null === $abilityHolder = $entityManager->getRepository(AbilityHolder::class)->find($id)) {
throw $this->createNotFoundException('No task found for id '.$id);
}
$originalAbilitys = new ArrayCollection();
$abilityHolder = new AbilityHolder();
// Create an ArrayCollection of the current Tag objects in the database
foreach ($abilityHolder->getAbilitys() as $ability) {
$originalAbilitys->add($ability);
}
$editForm = $this->createForm(AbilityHolderType::class, $abilityHolder);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
// remove the relationship between the ability and the Task
foreach ($originalAbilitys as $ability) {
if (false === $abilityHolder->getAbilitys()->contains($ability)) {
// remove the Task from the Tag
$ability->getAbilitys()->removeElement($abilityHolder);
// if it was a many-to-one relationship, remove the relationship like this
// $ability->setTask(null);
$entityManager->persist($ability);
// if you wanted to delete the Tag entirely, you can also do that
// $entityManager->remove($ability);
}
}
$entityManager->persist($abilityHolder);
$entityManager->flush();
// redirect back to some edit page
return $this->redirectToRoute('ability_edit', array('id' => $id));
}
return $this->render('ability/new-holder.html.twig', array(
'form' => $editForm->createView(),
));
// render some form template
}
}
уже совсем запутался, наверно я что-то упустил, намеренно не читал про функции добавления и удаления потому что там jquery
выводит сейчас просто <label class="required">Abilitys</label>
но если открыть веб-инспектора и посмотреть из чего состоит страница то там будет вроде нужные данные но их не видно, никакие стили их не блочат
Может я совсем не то ковыряю?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Имеется несколько таблиц, с данными пользователяВ первой его основные данные, во второй его телефоны, в третьей его майлы, в четвёртой контактные...
Мне нужно сделать так, чтобы задача в Cron выполнялась каждые n минут, причем n может быть от 1 до бесконечностиЭто число указывается в переменной...
Я создал верстку сайта на обычном HTML\CSS\JS , и я посадил верстку на WP, а теперь вопрос