我收到致命错误"调用成员函数update() on null"当尝试从Laravel的多步骤表单发布时。
Routes.php文件的内容
Route::get('accounts/create/{step}', 'AccountsController@getAccountStep')->where(['step' => '[1-3]']);
Route::post('accounts/create/{step}', AccountsController@postAccountStep')->where(['step' => '[1-3]']);
Route::post('accounts', 'AccountsController@postAccount');
Route::get('accounts', 'AccountsController@getAccount');
Route::resource('/accounts', 'AccountsController');
Route::get('accounts/success', 'AccountsController@accountSuccess');
AccountsController.php文件的内容
public function getAccount()
{
return view('accounts.create-1');
}
public function postAccount(Request $request)
{
$this->validate($request, [
'account_no' => 'required|account_no'
]);
$account = Account::firstOrCreate(['account_no' => $request->input('account_no')]);
$request->session()->put('account', $account);
return redirect()->action('AccountsController@getAccountStep', ['step' => 1]);
}
public function getAccountStep(Request $request, $step)
{
return view('accounts.create-'.$step, ['account' => $request->session()->get('account')]);
}
protected $lastStep = 3;
public function postAccountStep(Request $request, $step)
{
switch ($step)
{
case 1:
$rules = ['account_no' => 'required|min:2|max:50'];
break;
case 2:
$rules = ['bill_to' => 'required|min:3'];
break;
case 3:
$rules = ['phone' => 'required|in:Cats,Dogs'];
break;
default:
abort(400, "No rules for this step!");
}
$this->validate($request, $rules);
$request->session()->get('account')
->update($request->all())
;
if ($step == $this->lastStep) {
return redirect()->action('AccountsController@accountSuccess');
}
return redirect()->action('AccountsController@getAccountStep', ['step' => $step+1]);
}
public function accountSuccess(Request $request)
{
echo '<h1>Account Added</h1>';
}
创建- 1. - blade.php
{!! Form::open() !!}
<div class="row" id="progress-bar">
<img src="/images/dsd-admin-icons/progress-bars/new-acct-1.png" class="img-responsive">
</div>
<div class="form-group">
{!! Form::label('account_no','Account Number') !!}
{!! Form::text('account_no', null, ['class'=>'form-control']) !!}
{{csrf_field()}}
</div>
<div class="form-group">
{!! Form::label('name','Customer Name') !!}
{!! Form::text('name', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('acct_type','Account Type') !!}
{!! Form::select('acct_type', ['cfs' => 'CFS', 'trucking' => 'Trucking'], null, ['class'=>'form-control']) !!}
</div>
{!! Form::submit('Continue', ['class'=>'btn btn-warning']) !!}
{!! Form::close() !!}
看来
$request->session()->get('account')
返回null
。因此
$request->session()->get('account')->update()
不能工作。
我假设您将当前活动的用户帐户存储在$request->session()->get('account')
中,对吗?如果是,请再次检查会话配置是否正确。由于postAccount()
方法对我来说看起来不错,我认为会话无法存储数据。