Gura
Gura

Reputation: 330

can't receive the form request from my controller

I'm trying to do a simple form. The bind between the controller and the view is done. But I can't receive the form data when the user submit.

public function addAction()
{
    $router = $this->get('router');
    $request = $this->get('request');

    $ret = 'not set';
    $title = 'not set';

    if ($request->getMethod() == 'POST') {

    $pictures = $request->files->get('pictures');
    $title = $request->request->get('title');

    $ret = $this->get('my_project_blog.post_service')
                ->create($title, $subtitle, $description, $pictures);

    }

    return $this->render('MyProjectBlogBundle:Default:add.html.twig', array('err' => $ret, 'title' => $title));
}

Now the add.twig.html

<form enctype="multipart/form-data" action="{{ path('my_project_blog_add') }}" method="POST" id="contactform">

  <fieldset id="contact_form">
    <label for="title">
      <input type="text" name="title" id="name" placeholder="Enter A Title">
    </label>
    <label for="file">
      <input name="pictures[]" type='file' multiple='multiple' ></input>
    </label>

    <input type="submit" class="submit btn btn-default btn-black" id="submit" value="Submit">
  </fieldset>

</form>

The result before submit :

Pictures: not set.
Title: not set

After submit :

Pictures: Error pictures count == 0.
Title:

Upvotes: 0

Views: 176

Answers (1)

s7anley
s7anley

Reputation: 2498

Is there any particular reason, why you are not using Symfony form component?

Not sure how it's possible, but maybe you got wrong request service from container. You should use Request Stack service or add $request as parameter of you action. Just tested following code and everything works correctly.

public function addAction(Request $request)
{
    if ($request->getMethod() == 'POST') {
        $title = $request->request->get('title');
        $files = $request->files->all();
    }
}

As xurshid29 mentioned in comment, symfony gives you the opportunity to define forms easier and handle response easier.

// In controller
public function addAction(Request $request)
{
   $form = $this->createFormBuilder()
        ->add('title')
        ->add('pictures', 'file', [
            'multiple' => true, // Since symfony 2.5
        ])
        ->add('Submit', 'submit')
        ->getForm();

    $form->handleRequest($request);
    if ($form->isValid()) {
        // Process data from $form->getData()
    }

    return $this->render('MyProjectBlogBundle:Default:add.html.twig', [
        'form' => $form->createView()
    ]);
}

// In view 
{% block content %}
    {{ form(form) }}
{% endblock %}

Upvotes: 2

Related Questions