致命错误:null
类MemberProfileViewer扩展Page_controller { //... 公共功能servizi(){ $ source = null; if($ id =(int)$ this-> urlparams ['id']){ $成员=会员:: get() -> byid($ id); if($成员instance of成员){ 返回$ source = $成员 -> services() -> map('title','title'); } } 如果(is_null($ id)){ 返回$ this-> redirect('/'); } if(is_null($ source)){ 返回$ this-> httperror(404); } } 公共功能表格(){ $ fields = new FieldList( checkboxsetfield :: create( $ name =" serviceid", $ title =" select", $ source = $ this-> servizi() ), ) $ action = fieldlist :: create( formaction :: create('form','send') -> setuseButtontag(true) -> addExtraclass('BTN BTN-PRIMARY') ); $验证器= new Requireffields('serviceId'); $ form = new Form($ this,'form',$ fields,$ actions,$ validator); $ form--> setFormMethod('post',true); 返回$表格; } 公共功能doform($ data,$ form){ $ form-> session message( "谢谢,我们的顾问将尽快与您联系。",'好' ); $提交= new requestForm(); $ form--> saveinto($提交); $提交 -> write(); 返回$ this-> redirectback(); }}
始终为null
我不知道如何解决
是的,这解决了问题!
类MemberProfileViewer扩展Page_controller { //... 公共功能CurrentPageId(){ $ id = 0; $请求= $ 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); 返回$ source = member :: get() -> byid($ id) -> services() -> map('title','title') -> toarray(); } elseif(is_null($ source)){ 返回$ source = member :: get() -> byid(session :: get('id''))) -> services() -> map('title','title') -> toarray(); } } 公共功能表格(){ $ fields = new FieldList( checkboxsetfield :: create( $ name ="服务", $ title =" select", $ source = $ this-> servizi() ), ) $ action = fieldlist :: create( formaction :: create('form','send') -> setuseButtontag(true) -> addExtraclass('BTN BTN-PRIMARY') ); $验证器= new quilterfields('service'); $ form = new 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); $提交= new requestForm(); $ form--> saveinto($提交); $提交 -> write(); $ form-> session message( "谢谢,我们的顾问将尽快与您联系。",'好' ); session :: clear(" formdata。{$ form-> getName()}。data"); 返回$ this-> redirectback(); }}
您的问题可能是因为此行
$fields = new FieldList(
CheckboxSetField::create(
$name = "ServiceID",
$title = "Select",
$source = $this->Servizi() // <--
),
)
您的方法Servizi()
取决于一些路由(您尝试从URL获取成员ID)。该方法不始终返回您的CheckboxSet Field的好地图。如果您没有Servizi()
方法的路由,则可能不想重定向或返回HTTP错误。
现在,我不知道您是如何获得成员ID的,所以这取决于您如何获得它。但是您将能够这样解决。
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
}