Wyświetlanie entity w html.twig symfony2

0

Chciałbym wyświetlić zdefiniowany element w html. twig. Na początek zwykły wprowadzony z palca, docelowo pobierany z bazy. Próbuje odnieść się do materiałów jakie znalazłem w sieci ale coś jest nie tak. Może ktoś podpowie w czym rzecz.

Tak wygląda entity:

/**
 * Products
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Products
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * Set id
     *
     * @param integer $id
     * @return Products
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Products
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    public function __toString()
    {
        return $this->getName();
    }
} 

Tak zdefiniowana Form:

 class ProductsForm extends AbstractType
{
    public function productsForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('save', 'submit');
    }
    public function getName()
    {
        return 'product';
    }
}

a tak treść controllera:

     /**
     * @Route("/shop/", name="shop")
     */
    public function shopAction()
    {
//        $em = $this -> getDoctrine() -> getManager();
//        $product = $em -> getRepository('AppBundle:Products')->findOneBy(array('id' => '1'));
        $product = new Products();
        $product->setName('pierwszy');
        $product->setId(1);

        $form = $this->createForm(new ProductsForm(), $product);

        return $this->render('default/shop.html.twig', array(
            'form' => $form->createView()));
    }

no i wywołanie w html.twig:

 {% block body %}
    {{ form.product.name }}
{% endblock %}

Jakbym nie odwołał się do elementu to nie znajduje ani product ani name. Robię to analogicznie do przykładów jakie znalazłem i jakie sam wcześniej robiłem ale coś jest nie tak. Proszę o pomoc.

1

Przekaż encje do widoku i odwołaj się do niej w szablonie:

$this->render('default/shop.html.twig', array(
    'form' => $form->createView().
    'product' => $product
});

{% block body %}
    {{ product.name }}
{% endblock %}
0

działa ale w jaki sposób odwołać się do elementu który stworzyłęm np: submit w form. Pisze:

{{ form.save }} 

i nic się nie wywołuje. Dalej wyskakuje że element save nie jest zdefiniowany.

Docelowo chce aby przy każdym produkcie był radio button i jeden button do zapisania elementów zaznaczonych jako true.

0

Hmm, no to poczytaj sobie w dokumentacji jak wyświetla się formularze w szablonie:

http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Tobie bardziej przyda się ten drugi sposób:

{{ form_start(form) }}
    {{ form_errors(form) }}
    <div>
        {{ product.name }}
        {{ form_label(form.name) }}
        {{ form_errors(form.name) }}
        {{ form_widget(form.name) }}
    </div>
    <div>
        {{ form_widget(form.save) }}
    </div>
{{ form_end(form) }}

Docelowo chce aby przy każdym produkcie był radio button i jeden button do zapisania elementów zaznaczonych jako true.

Chyba chodzi Ci o checkboxa, z radio możesz wybrać tylko jeden element.

0

Uczę się dopiero tego i w jednym przykładzie zadziałało mi a w drugim mam problem własnie. Wyskakuje mi:

Method "name" for object "Symfony\Component\Form\FormView" does not exist in default/shop.html.twig at line 7

Tak jakby w ogóle nie widział. Czy odwołam się do name czy submit czy innych elementów.

0

dopiero jak w controllerze napisze:

 $form = $this->createFormBuilder()
            ->add('name','text')
            ->add('check', 'checkbox', array(
                'required' => false))
            ->add('submit','submit')
            ->getForm();

to działają wywołane elementy. Odwołanie:

$form = $this->createForm(new ProductsForm(), $products); 

jest tu zbędne albo w ogóle coś pokręciłem w kodzie i używam nie tak jak trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1