php使用按钮更改某些行的值
我的数据库中有一个abstracts表,其中有abstracts_Status_ID列,我正在尝试创建一个按钮,将每个状态从“2”更改为“3” 我尝试过这样做:- 我的控制器php使用按钮更改某些行的值,php,laravel,eloquent,Php,Laravel,Eloquent,我的数据库中有一个abstracts表,其中有abstracts_Status_ID列,我正在尝试创建一个按钮,将每个状态从“2”更改为“3” 我尝试过这样做:- 我的控制器 public function publish($A_ID) { $abstracts = Project::find($A_ID); $abstracts->Abstract_Status_ID= 3; $abstracts->save(); return r
public function publish($A_ID)
{
$abstracts = Project::find($A_ID);
$abstracts->Abstract_Status_ID= 3;
$abstracts->save();
return redirect('/AdvertisedProjects')->with ('success', 'Abstracts Published' );
}
我的路线
Route::put( '/projects', 'AbstractsController@publish');
Route::post( '/projects', 'AbstractsController@publish');
我的观点(项目)
尝试使用csrf代币,但没有,因为有说服力的文档说,没有它,任何post/put都将受到限制
@if (count ($abstracts)> 0)
@foreach ($abstracts as $abstract)
@if($abstract->Abstract_Status_ID == 2)
{!! Form::open(['action' => ['AbstractsController@publish' , $abstract->A_ID], 'method' => 'post' ]) !!}
{{ csrf_field() }}
{{Form::hidden('_method', 'PUT') }}
{{Form::Submit('Submit Changes',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}
@endif
@endforeach
单击按钮时出现的错误
(1/1) ErrorException
Missing argument 1 for App\Http\Controllers\AbstractsController::publish()
此外,上面的代码将显示多个按钮,是否有任何建议使一个按钮更改所有按钮?您正在使用form method=“POST”。我认为应该是method=“PUT”。A:如果您想为每个摘要设置一个按钮,只需将路线更改为:
Route::put( '/projects/{A_ID}', 'AbstractsController@publish');
B:如果您只想使用一个按钮来更改所有内容,您可以在隐藏输入中回显其ID,然后发送表单 所以你的观点是:
@if (count ($abstracts)> 0)
{!! Form::open(['action' => ['AbstractsController@publish'], 'method' => 'post' ]) !!}
{{ csrf_field() }}
{{Form::hidden('_method', 'PUT') }}
@foreach ($abstracts as $abstract)
@if($abstract->Abstract_Status_ID == 2)
{{Form::hidden('abstract_ids[]', $abstract->A_ID) }}
@endif
@endforeach
{{Form::Submit('Submit Changes',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}
和您的控制器:
public function publish()
{
foreach(request('abstract_ids') as $A_ID){
$abstracts = Project::find($A_ID);
$abstracts->Abstract_Status_ID= 3;
$abstracts->save();
}
return redirect('/AdvertisedProjects')->with ('success', 'Abstracts Published' );
}
代码中的主要问题是路由的定义,将参数($A_ID)传递给controllers publish方法 但在你的路线中,你从来没有提到你正在通过你的路线传递任何论点。因此,为了传递参数,可以在路由URL中使用{$A_ID} 您应该始终记住的一点是,您应该始终为路由指定一个名称,并使用其名称和route()Laravel helper方法调用它 使用路由名称的好处是,如果您决定在开发过程的后期更改路由的URL结构,您将永远不必在应用程序中的任何地方更改它,因为您没有通过其URL调用它 而且路由名称不太容易出错 总的来说,您应该这样定义您的路线
Route::put('projects/{A_ID}/update', 'AbstractsController@publish')->name('projects.update');
Route::post('projects/{A_ID}/post', 'AbstractsController@publish')->name('projects.store');
然后在你的刀片文件中,你可以这样称呼它
{!! Form::open(['action' => route('projects.store', $abstract->A_ID), 'method' => 'post' ]) !!}
希望这能澄清并解决您的问题