我正在尝试使用activate或deactivate来获取一个使用$product->status的表单。
活动按钮显示如果$product->status为0,而非活动按钮显示$product->status为1。
每次单击此按钮时,我都希望切换mysql数据库中$product->status的值。
<form action="{{route('invetory.create')}}" method="POST">
@csrf
<table class="table table-bordered" id="dynamicTable">
<tr>
<th>item</th>
<th>tax</th>
<th>Action</th>
</tr>
@forelse($products as $product)
<input type="text" name="item" value="{{$product->id}}
class="form-control" hidden />
<td>
<input type="text" name="item" value="{{$product->item}}
class="form-control" />
</td>
<td>
<input type="text" name="tax" value="{{$product->tax}}
class="form-control" />
</td>
@if($product->status =='0')
<td>
<button type="button" data-id="{{ $product->id }}" class="btn btn-success remove-tr active_btn">active</button>
</td>
@else
<td>
<button type="button" data-id="{{ $product->id }}" class="btn btn-danger remove-tr deactive_btn">Deactive</button>
</td>
@endif
</table>
</form>在这里,我给出了我使用web.php的路线
Route::post('/update', 'App\Http\Controllers\InventoryController@update')>name('invetory.update');这里我添加了我使用过InventoryController.php的控制器
public function update(Request $REQUEST){
dd($REQUEST->all());
Inventory::update( $REQUEST->invetory as $key => $value);
return redirect()->action([InventoryController::class, 'index']);
}当我点击按钮时,我得到了500错误。
发布于 2022-09-13 13:16:16
您可以使用POST请求来实现这一点,这将在每次切换产品时刷新页面,或者可以使用AJAX异步进行更改。使用Javascript和AJAX将是首选的方式,这样您就不会丢失选定的过滤器、分页等。
您不需要外部包来实现这一点,您可以使用JavaScript的fetch方法。此外,与其有两个单独的功能和路由,我建议有一个路由将切换产品的状态,即,如果它是活动的,使它不活跃,反之亦然。根据定义,该方法应该是POST请求,为了避免CSRF保护和使用中间件来保护请求,我更愿意为此做GET请求。
这是完整的代码。
web.php中切换状态的web路由Route::get('projects/toggle', [ProjectController::class, 'toggle'])->name('projects.toggle');toggle方法在ProjectController.php中的实现public function toggle(Request $request) {
$project = Project::find($request->project_id);
$project->status = !$project->status;
$project->save();
return response()->json(['status' => (int) $project->status]);
}请注意,我正在返回一个json响应,其中包括新的项目状态。我们将在JavaScript代码中使用它来对显示状态的列进行显式更新。
id属性,这样我就可以对其进行第纳尔访问,以便更新它。 @foreach($projects as $project)
<tr>
<td>{{$project->title}}</td>
<td id="project-status-{{$project->id}}">{{$project->status}}</td>
<td><button onClick="toggleStatus('{{$project->id}}')">Toggle</button></td>
</tr>
@endforeach在同一个文件中,我们添加了以下JavaScript代码。它接受project_id作为参数,通过单击按钮传递给ajax请求,使ajax请求后端更新状态,然后更新适当的DOM元素以显示新状态。
function toggleStatus(project_id) {
fetch("{{ route('projects.toggle') }}?project_id=" + project_id)
.then(response => response.json())
.then(response => {
document.querySelector("#project-status-" + project_id).innerHTML = response.status;
})
}正如我提到的,您可以在JavaScript部件中使用多个选项。您可以向每个按钮注册一个事件侦听器,而不是调用一个函数,但是使用函数调用的这种方法要快一些。另外,我将project_id作为GET参数传递,您可以将包含它的路由定义为路由参数,但接下来您需要执行一些字符串替换,以便在JavaScript中执行字符串替换。总之,提出的方案是一个很好的解决方案,将服务于你的目的。
附注:对于这样的东西,LiveWire是一个完美的契合。
https://stackoverflow.com/questions/73657988
复制相似问题