Laravel多步表单导致在null时调用成员函数update()



我收到致命错误"调用成员函数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()方法对我来说看起来不错,我认为会话无法存储数据。

最新更新