简体   繁体   中英

Symfony2 forms - No Form Builder

new to Symfony and trying to understand something. I have index.twig.html and in it, I have a form

<form action="{{ path('SpecialAlertBundle_add') }}" method="post" enctype="multipart/form-data" class="addAlertForm">

    <textarea class="addMargin" id="na_command" name="na_command" rows="3" cols="50" placeholder="A20APRLONLAX"></textarea>

    <button type="button" class="btn btn-default" id="submit_alert" name="submit_alert">Submit</button>
    {{ name }}

</form>

I wont add all the html, but its a normal form, not using Form Builder.

I have a route set up

SpecialAlertBundle_add:
    pattern:  /
    defaults: { _controller: SpecialAlertBundle:Alert:add }
    requirements:
       _method:  GET|POST

So that route displays my form ok when I go to localhost:8000. It also states which controller to use. As for the controller, I have

class AlertController extends Controller
{
    public function addAction()
    {
        $request = $this->get('request_stack')->getCurrentRequest();

        if ($request->request->has('submit_alert')) {
            $name = $request->request->get('na_command');
        } else {
            $name = 'Not submitted yet';
        }

        return $this->render('SpecialAlertBundle:Page:index.html.twig', array(
            'name' => $name
        ));
    }
}

The first thing I want to clear up is that return in the controller. Is this the view I want it to render AFTER the form has been submitted?

Second thing is, at the moment, The {{name}} in the template is always displaying Not submitted yet. Even when I submit the form with data, nothing seems to happen. It seems that the button is doing nothing. Even when I look in the debug console, I see no request being made.

So I was hoping someone could advise me on what I am doing wrong here?

Thanks

First of all why don't you use Request directly in controller instead of request_stack? Request stack is mostly for injecting it to service (and not to inject request to the service).

So, you can do something like this:

public function addAction(Request $request)
{}

Then I'd suggest you to separate get request and post request. Just define two different routes. For example:

SpecialAlertBundle_add:
    pattern:  /
    defaults: { _controller: SpecialAlertBundle:Alert:add }
    requirements:
       _method:  GET

SpecialAlertBundle_create:
    pattern:  /
    defaults: { _controller: SpecialAlertBundle:Alert:create }
    requirements:
       _method:  POST

After this you will have to change your form action value: set it to 'SpecialAlertBundle_create'

And it will be cleaner which one is now. After that you just don't need the checking on existence of 'submit_alert' property in request. You can assign the value of 'na_command' field to the $name:

$name = $request->get('na_command');  

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM