【发布时间】:2021-03-29 11:30:01
【问题描述】:
我在 Laravel-5.8 中有一个项目。
'actionURL' => route('appraisal.appraisal_goals.goal_adjustment_self_review', ['id'=>$employeeId]),
从 Notification actionUrl,我将['id'=>$employeeId] 传递到:
public function goal_adjustment_self_review($id)
{
$goals = AppraisalGoal::where('employee_id', $id)->whereNull('deleted_at')->get();
return view('appraisal.appraisal_goals.goal_adjustment_self_review')->with(['goals' => $goals]);
}
然后我有这个由goal_adjustment_self_review($id)生成的编辑控制器函数
public function goal_adjustment_edit($id)
{
$userCompany = Auth::user()->company_id;
$userId = Auth::user()->employee_id;
$goal = AppraisalGoal::findOrFail($id);
return view('appraisal.appraisal_goals.goal_adjustment_edit')
->with('goal', $goal);
}
public function goal_adjustment_update(UpdateAppraisalGoalAdjustmentRequest $request, $id)
{
DB::beginTransaction();
try {
$goal = AppraisalGoal::findOrFail($id);
$goal->goal_type_id = $request->goal_type_id;
$goal->weighted_score = $request->weighted_score;
$goal->save();
DB::commit();
Session::flash('success', 'Goal Setting Weight is updated successfully');
return redirect()->route('appraisal.appraisal_goals.goal_adjustment_self_review');
} catch (Exception $exception) {
Log::error($exception);
DB::rollback();
Session::flash('error', 'Action failed! Please try again');
return redirect()->route('appraisal.appraisal_goals.goal_adjustment_self_review');
}
}
视图:goal_adjustment_edit
<form action="{{route('appraisal.appraisal_goals.goal_adjustment_update', ['id'=>$goal->id])}}" method="post" class="form-horizontal" enctype="multipart/form-data">
{{ csrf_field() }}
<input name="_method" type="hidden" value="PUT">
<div class="card-body">
<div class="form-body">
<div class="row">
<div class="col-12 col-sm-6">
<div class="form-group">
<label class="control-label"> Weight(%):<span style="color:red;">*</span></label> <input type="hidden" id="goal_weight_balance" value="0" disabled>
<input id="total_weighted_score" type="text" name="weighted_score" value="{{old('weighted_score',$goal->weighted_score)}}" placeholder="Enter weighted score here" class="form-control" max="120" onkeyup="checkScore(this.value)">
</div>
</div>
</div>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">Update</button>
</div>
</form>
路线:
Route::group(['prefix' => 'appraisal', 'as' => 'appraisal.', 'namespace' => 'Appraisal', 'middleware' => ['auth']], function () {
Route::get('appraisal_goals/goal_adjustment_self_review/{id?}', 'AppraisalGoalsController@goal_adjustment_self_review')->name('appraisal_goals.goal_adjustment_self_review');
Route::get('appraisal_goals/goal_adjustment_edit/{id?}', 'AppraisalGoalsController@goal_adjustment_edit')->name('appraisal_goals.goal_adjustment_edit');
Route::put('appraisal_goals/goal_adjustment_update/{id?}', 'AppraisalGoalsController@goal_adjustment_update')->name('appraisal_goals.goal_adjustment_update');
});
当我提交上面的更新表单时,我收到了这个错误:
[2020-12-18 20:10:46] production.ERROR: Too few arguments to function App\Http\Controllers\Appraisal\AppraisalGoalsController::goal_adjustment_self_review(),0 通过,正好 1 预期
对于这一行:
public function goal_adjustment_self_review($id)
我该如何解决这个问题?
【问题讨论】:
-
您可以尝试更改方法
goal_adjustment_self_review($id = null)的签名定义,因为您在路由定义中将路由参数作为可选参数。对于任何此类可选路由参数,您还可以通过请求对象或辅助函数(如request()->route('id'))访问控制器中的值 -
顺便说一句,您的控制器至少有 1700 行这一事实应该是一个巨大的危险信号。这里有很多浪费的代码(例如,为单个数据库查询运行事务。)您的 URI、方法、类和路由名称也都非常笨拙,导致在尝试理解代码时进行不必要的扫描。
UpdateAppraisalGoalAdjustmentRequest?
标签: php laravel laravel-routing