Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

setFormAction causes error


Reply


2 Posts   640 Views

Avatar
Fraser

Community Member, 47 Posts

13 June 2012 at 11:38am

I have a signup form:

function SignupForm() {
      
      $fields = new FieldSet(
         new TextField("FirstName", "First name"),
         new TextField("Surname"),
         new EmailField("Email", "Email address")
      );   
   $submitAction = new FieldSet(new FormAction("SignupAction", "Sign up"));
   $required = new RequiredFields("Email");
      
      $SignupForm = new Form($this, "SignupForm", $fields, $submitAction, $required);
      
      
      
      return $SignupForm;
   }

   function SignupAction($data, $form) {

      $member = new Member();
      $form->saveInto($member);

      $member->write();
      
      if($group = DataObject::get_one('Group', "ID = $this->defaultGroupID")){
         $member->Groups()->add($group);
         Director::redirect('thanks-for-registering/');
      }else{
         Director::redirect('registration-failed/');
      }

   }

Which runs fine from the homepage, however it appears on every page and sub page on the site so I need to set the form action.

I have tried adding this:

$SignupForm->setFormAction(Director::baseURL().'home/SignupAction');

before return $SignupForm and I get the following error when I submit the form (from anywhere)

Missing argument 2 for Page_Controller::SignupAction()

function SignupAction($data, $form) {
68
69       
70       $member = new Member();
71       $form->saveInto($member);
.....

What is going on here?

Thanks

Avatar
Bambii7

Community Member, 254 Posts

13 June 2012 at 1:32pm

If it's appearing on all pages it sounds like the form might be declared on the Page.php class. If thats right you should make a subpage for the form. Make SignUp.php cut paste the form functions into it. Make SignUp.ss and assign the behavior to the page of your choice.