Symfony: get new ID in a form - forms

I have an object displaying within a form, a hidden field being related to its PK (field id).
When I create a new object, the field has a null value. Submitting the form, the object is inserted into the DB and it now has an ID, but the field in the page still has a null value.
If a reload the page, now the ID is indeed set in the hidden field.
In my opinion, this is due to the form processing of Symfony: when a create an object, it creates a form, with this form valid the object is saved but the form still uses the data before it was saved.
The question is: how to get the auto-incremented key in the form up-to-date? Shouldn't the form only have a reference to the object? Can't the value be updated?

make sur that you call $entityManager->flush() method after insert and that you bind your form whene you have same data in your request object
$form->submit($request->request->get($form->getName()));

You should have an Entity assigned to your Form by FormFactory. Then Symfony will fill that Entity with submitted values. What's left is only persist the Entity and flush to database.
You can find steb-by-step form submission in Symfony Cookbook

Related

value vs. data in Symfony Forms - What is the difference and how to control the content?

what is the difference between the two fields data and value in Symfony Forms?
I have created a custom Form Type for my custom Task class which works fine in all my forms. To understand the internal workflow behind form better, I have observed the operation by adding some {{ dump(...) }}statements to my Twig files.
In all my forms the value and data fields of my Task type both hold the same information: A reference to the Task object.
However I have recognized, that some third party Form Types have different values for the two value and data fields: While the data fields holds a reference the underlying object the value field just contains an ID of this object (member field of the object). How is this achieved?
What exactly is the purpose of these two fields?
What is the difference between them?
How do I control/chance the content of
value field while still having the object reference in the data
field?

How to hide ID field in MVC4 view

I am new to MVC4. I have a form for displaying user roles and a link for editing.
This template is created by entity scaffold.
Whenver user clicks edit link a jquery modal popup displays for editing. The form contains 2 fields ID and User Role .
I wished not to display the Id part so i commented the ID part display . But after updating i will get the error like
Store update, insert, or delete statement affected an unexpected number of
rows (0). Entities may have been modified or deleted since entities were loaded.
Refresh ObjectStateManager entries
I then debugged and found the ID was 0. So I tritd with displaying ID It worked.
why is this happening. How can I dispaly and edit form without ID field.
Add a hidden input for the ID property in your form
#Html.HiddenFor(m => m.ID)
or add a route value in the form (refer all the overloads here)
#using (Html.BeginForm("actionName", "controllerName", new { ID = Model.ID })`

Foreign entity in form into different kind of input

I have two entities: product and category (Symfony 2.3).
I want to create a form in which an user can choose a product by first selecting the category. A user selects the category by clicking on image, then I want to set the image's value into a hidden input, but I don't see how can I change a foreign entity choice list to a hidden input (http://symfony.com/doc/current/reference/forms/types/entity.html).
How can I accomplish this? (how to change form input to hidden)
If I set cascade validation to true, will it for example check if a category really exist. (To prevent putting products with non-existing category from malicious users) ?
Part 1
To do this you need to use a data transformer to do two things:
transform an entity into an identifier that is either a string or integer so a form can render it as a hidden field.
transform the string or integer identifier into the entity when the form is submitted so that the parent entity can be saved with the correct relationship
The symfony docs I linked to above (here too) actually walk though an entire example of using a data transformer with a form.
As a shameless plug (because I believe it is helpful) I have written a little tutorial on using a data transformer for a hidden field with an entity id: http://lrotherfield.com/blog/symfony2-forms-entity-as-hidden-field/
Part 2
If you are using the data transformer then you don't need to worry about malicious users. The data transformer will fail because it will not be able to reverse transform the category from the fake id. In my tutorial the transformer will throw a Symfony\Component\Form\Exception\TransformationFailedException exception.
You can also write a validator (potentially using a call back) if you wanted that checks that the submitted category is real if you want an error to show in the form. Doctrine wont allow you to persist a fake category relationship as the foreign key constraint will fail.

web2py Validation

I would like to know validation is a must, on fields which are not present on the form but are available in the table. Does marking them as NULL in the define_table make them validated only when they are present in the form?
The form validators apply only to forms, so will not affect fields that are not present in the form. I'm not sure what you mean by marking a field as NULL, but if you are referring to Field(..., notnull=True), that executes the SQL NOT NULL statement when the database table is first created (assuming DAL migrations are enabled). That option is enforced by the database itself whenever a record is inserted or updated (via a form or any other method). If a notnull field is left empty, it will result in an operational error from the database.

symfony2: how to validate a property which is not mapped to the entity ('property_path' => false)

I'm having a registration form, which contains input fields, almost every field mapped to a property of the User class. But there are some fields which are not mapped. Validation is done via annotations in the User class.
My question is: how do I validate those fields which are not mapped?