Hi,

I know it says in the book that you can create a form on the fly in an
action, but this is really bad practice.

Even if you try setting the name format for the form with "$this->form-
>widgetSchema->setNameFormat('contact[%s]')" you'll get thrown an
error because this is a protected property within the sfForm class.

Seeing as you're learning symfony and you've come across this problem,
I wanted to quickly give you an answer as I don't want you to be put
off by what the framework has to offer because of this annoying error.

To fix it:

Create a form class in your form directory (lib/form). Let's call it
ContactForm.class.php

<?php
class ContactForm extends sfForm
{
        public function configure()
        {

           $this->setWidgets(array(
           'name' => new sfWidgetFormInputText(),
           'email' => new sfWidgetFormInput(array('default' =>
           'm...@example.com')),
           'subject' => new sfWidgetFormChoice(array('choices' =>
array('Subject A', 'Subject B', 'Subject C'))),
           'message' => new sfWidgetFormTextarea(),
       ));
       $this->setValidators(array(
           'name' => new sfValidatorString(),
           'email' => new sfValidatorEmail(),
           'subject' => new sfValidatorString(),
           'message' => new sfValidatorString(array('min_length' =>
4))
       ));

       $this->widgetSchema->setNameFormat('contact[%s]');
        }
}

In your template (if you have crsf enabled, which i hope you do
(should be default), you'll have to render it's widget):

<form action="<?php echo url_for('investigator/contact') ?>"
method="post">
   <?php $form['_csrf_token'];?>
    <table>
        <?php echo $sf_user->getFlash('notice') ?>
        <?php echo $form ?>
        <tr>
            <td colspan="2">
                <input type="submit" value="Change" />
            </td>
        </tr>
    </table>
</form>

In your actions, you have the following:

       // Define the form
       $this->form = new ContactForm();

        // Deal with the request
       if ($request->isMethod('post'))
       {
           $this->form->bind($request->getParameter('contact'));
           if ($this->form->isValid())
           {
                // do what you want here
           }
       }


This form should validate correctly now.

I hope this helps and good luck with learning symfony.

Regards,

Jamie


On Dec 14, 11:17 am, gfranzini <gabriele.franz...@nervianoms.com>
wrote:
> Hello Erkhembayar,
> Thank you.
>
> But after following your suggestion, if I try to display the form I
> get the following:
>
> Fatal error: Call to undefined method sfForm::setNameFormat() in C:\dev
> \sfproject\apps\frontend\Modules\Investigator\actions
> \contactAction.class.php on line 12
>
> On Dec 14, 2:18 am, Erkhembayar Gantulga <erheme...@gmail.com> wrote:
>
> > Hi,
>
> > I think that in order to validate your form you need to put
> > $this->form->setNameFormat('contact[%s]'); for that form. After your post
> > in, $this->form->bind($request->getParameter('contact')); it doesn't have
> > correct value to validate. It would be help you.
>
> > Cheers.
> > Erkhembayar Gantulga

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to