Неустранимая ошибка: вызов функции-члена Services () в null
класс MemberProfileViewer extends Page_Controller { // ... публичная функция 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); } } форма публичной функции () { $ fields = new FieldList ( CheckboxSetField :: создать ( $ name = "ServiceID", $ title = "Выбрать", $ source = $ this-> Servizi () ), ) $ actions = FieldList :: create ( FormAction :: create ('form', 'Send') -> setUseButtonTag (правда) -> addExtraClass ('btn btn-primary') ); $ validator = new RequiredFields ('ServiceID'); $ form = новая форма ($ this, 'form', $ fields, $ actions, $ validator); $ form-> setFormMethod ('POST', true); вернуть $ форму; } публичная функция doform ($ data, $ form) { $ Форма-> sessionMessage ( «Спасибо, наш консультант свяжется с вами как можно скорее», «хорошо» ); $ submission = new RequestForm (); $ Форма-> saveInto ($ представление); $ Submission-> запись (); return $ this-> redirectBack (); } }
всегда ноль
Я не знаю как решить
класс MemberProfileViewer extends Page_Controller { // ... публичная функция 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; вернуть $ id; } публичная функция 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 (); } } форма публичной функции () { $ fields = new FieldList ( CheckboxSetField :: создать ( $ name = "Сервис", $ title = "Выбрать", $ source = $ this-> Servizi () ), ) $ actions = FieldList :: create ( FormAction :: create ('form', 'Send') -> setUseButtonTag (правда) -> addExtraClass ('btn btn-primary') ); $ validator = new RequiredFields ('Service'); $ form = новая форма ($ this, 'form', $ fields, $ actions, $ validator); $ form-> setFormMethod ('POST', true); $ data = Session :: get ("FormData. {$ form-> getName ()}. data"); вернуть данные? $ form-> loadDataFrom ($ data): $ form; } публичная функция doform ($ data, $ form) { Session :: set ("FormData. {$ Form-> getName ()}. Data", $ data); $ submission = new RequestForm (); $ Форма-> saveInto ($ представление); $ Submission-> запись (); $ Форма-> sessionMessage ( «Спасибо, наш консультант свяжется с вами как можно скорее», «хорошо» ); Session :: ясно ( "FormData {$ форма-> GetName ()} данных.."); return $ this-> redirectBack (); } }
Ваша проблема, вероятно, из-за этой строки
$fields = new FieldList(
CheckboxSetField::create(
$name = "ServiceID",
$title = "Select",
$source = $this->Servizi() // <--
),
)
Ваш метод Servizi()
зависит от некоторой маршрутизации (вы пытаетесь получить идентификатор участника из URL). Метод не всегда верните хорошую карту для вашего CheckboxSetField. Если у вас нет маршрута для вашего Servizi()
метод, вы, вероятно, не хотите перенаправить или вернуть ошибку http.
Теперь я не знаю, как вы получили свой идентификатор участника, так что вам решать, как вы получите это. Но вы сможете исправить это так.
public function servizi($memberId = 0)
{
$array = [];
if(! $memberId && ! ($memberId = Member::currentUserID())) // check current logged in Member
return $array;
if(! $member = Member::get()->byID($memberId))
return $array;
return $member->Services()->map('Title','Title');
}
Код выше не проверен.
Я бы сделал:
$source = null;
if ($id = $this->urlParams['ID']) {
$member = Member::get()->byId($id);
if ($member instanceof Member) {
$source = $member->Services()->map('Title','Title');
}
}
if (is_null($source)) {
//don't show that field, show a LiteralField with an error maybe
} else {
//show your field with $source
}