Fraser
Fraser

Reputation: 14246

Silverstripe Form Renderwith doesn't show form or any styling

I am trying to render a form with template with the following:

function FacebookForm($fbFields) {

        $actions = new FieldSet(
            new FormAction('doFaceBookForm', 'Register')
        );

        $memberfields = singleton('XEUser')->getMemberFormFields();

        $fields = new FieldSet();
        $reqFields = array();
        foreach($fbFields as $key => $value){
            switch($value){
                case 'Gender':
                    $fields->push($memberfields->fieldByName('Gender'));
                    $reqFields[] = 'Gender';
                    break;
                case 'DateOfBirth':
                    $fields->push($memberfields->fieldByName('DateOfBirth'));
                    $reqFields[] = 'DateOfBirth';
                    break;
            }
        }
        $validator = new RequiredFields($reqFields);

        $form = new Form($this, 'FaceBookForm', $fields, $actions,$validator);
        $form->disableSecurityToken();

        return $form->renderWith(array('FacebookController','Page'));
        //return $form;

    }

When I just return $form my form appears but in the default contentController.ss so I created a new template and added return $form->renderWith(array('FacebookController','Page'));. When I do this, I get everything that should be in the page but with no styles being applied at all and the form doesn't even appear. Here is my FacebookController template:

<div id="left">

    <h2>Thankyou for signing up with your Facebook account</h2>
    <p>The following details could not be obtained from your Facebook account, please enter them now.</p>
    $form
</div>

<div id="right">

</div>

can anyone shed any light on this?

Upvotes: 0

Views: 899

Answers (1)

Benjamin Smith
Benjamin Smith

Reputation: 887

Try using the name of the method in your template:

$FacebookForm

Alternatively, you could subclass the Form class and use a custom forTemplate() method. More info below.

See:

Upvotes: 1

Related Questions