Fatal error: Call to a member function Services() on null
class MemberProfileViewer extends Page_Controller { // ... public function Servizi() { $source = null; if ($id = (int)$this->urlParams['ID']) { $member = Member::get()->byID($id); if ($member instanceof Member) { return $source = $member->Services()->map('Title','Title'); } } if (is_null($id)) { return $this->redirect('/'); } if (is_null($source)) { return $this->httpError(404); } } public function form() { $fields = new FieldList( CheckboxSetField::create( $name = "ServiceID", $title = "Select", $source = $this->Servizi() ), ) $actions = FieldList::create( FormAction::create('form', 'Send') ->setUseButtonTag(true) ->addExtraClass('btn btn-primary') ); $validator = new RequiredFields('ServiceID'); $form = new Form($this, 'form', $fields, $actions, $validator); $form->setFormMethod('POST', true); return $form; } public function doform($data, $form) { $form->sessionMessage( "Thank you, you will be contacted as soon as possible by our consultant.", 'good' ); $submission = new RequestForm(); $form->saveInto($submission); $submission->write(); return $this->redirectBack(); } }
is always null
I do not know how to solve
Yes, this has solved the problem!
class MemberProfileViewer extends Page_Controller { // ... public function currentPageID() { $id = 0; $request = $this->getRequest(); if(is_numeric($request->requestVar('ID'))) { $id = $request->requestVar('ID'); } elseif (is_numeric($request->param('ID'))) { $id = $request->param('ID'); } $id = (int)$id; return $id; } public function Servizi() { $source = null; if ($id = $this->currentPageID()) { Session::set('ID', $id); return $source = Member::get()->byID($id)->Services()->map('Title','Title')->toArray(); } elseif (is_null($source)) { return $source = Member::get()->byID(Session::get('ID'))->Services()->map('Title','Title')->toArray(); } } public function form() { $fields = new FieldList( CheckboxSetField::create( $name = "Service", $title = "Select", $source = $this->Servizi() ), ) $actions = FieldList::create( FormAction::create('form', 'Send') ->setUseButtonTag(true) ->addExtraClass('btn btn-primary') ); $validator = new RequiredFields('Service'); $form = new Form($this, 'form', $fields, $actions, $validator); $form->setFormMethod('POST', true); $data = Session::get("FormData.{$form->getName()}.data"); return $data ? $form->loadDataFrom($data) : $form; } public function doform($data, $form) { Session::set("FormData.{$form->getName()}.data", $data); $submission = new RequestForm(); $form->saveInto($submission); $submission->write(); $form->sessionMessage( "Thank you, you will be contacted as soon as possible by our consultant.", 'good' ); Session::clear("FormData.{$form->getName()}.data"); return $this->redirectBack(); } }
$this->urlParams['ID']
? You should add some error handling in case the member isn't found, before you try to use it – scrowler