激活/停用Laravel中的多个客户端
我正在使用Laravel 5.1
我有一个客户表。 客户将创建自己的帐户并等待管理员批准。 管理员可以随时激活,停用或阻止它们。 我有三个链接(如果需要,我可以更改为按钮)表的底部ACTIVE
, DEACTIVATE
& BLOCK
。 每行也有复选框。
现在,我想要选择一个或多个客户端,并更改数据库中member
表的status
字段的值。
这里是我的观点的代码:
<table border="1">
<tr>
<td></td>
<td>Name</td>
<td>Activity</td>
<td>main Activity</td>
<td>Legal Status</td>
<td>SIREN Code</td>
<td>Contact Firstname</td>
<td>Contact Lastname</td>
<td>Contact Email</td>
<td>Contact Telephone</td>
<td>Address</td>
<td>Town</td>
<td>Area</td>
<td>Region</td>
<td>Creation Date</td>
<td>Offer Pack Name</td>
<td>Login Password</td>
<td>Status</td>
</tr>
@foreach($clients as $client)
<tr>
<td>{!! Form::checkbox('client[]',$client->id,null) !!}</td>
<td>{{ $client->name }}</td>
<td>{{ $client->activity }}</td>
<td>{{ $client->main_activity }}</td>
<td>{{ $client->status }}</td>
<td>{{ $client->siren_code }}</td>
<td>{{ $client->contact_firstname }}</td>
<td>{{ $client->contact_lastname }}</td>
<td>{{ $client->email }}</td>
<td>{{ $client->contact_telephone }}</td>
<td>{{ $client->address }}</td>
<td>{{ $client->town }}</td>
<td>{{ $client->area }}</td>
<td>{{ $client->region }}</td>
<td>{{ $client->creation_date }}</td>
<td>{{ $client->offer_pack_name }}</td>
<td>{{ $client->password }}</td>
<td>{{ $client->status }}</td>
</tr>
@endforeach
</table>
<div class="col-md-10 text-center">
<a href="{{ action('AdminController@blockClient') }}" class="btn btn-default">BLOCK</a>
<a href="{{ action('AdminController@activateClient') }}" class="btn btn-default">ACTIVATE</a>
<a href="{{ action('AdminController@deactivateClient') }}" class="btn btn-default">ACTIVATE</a>
</div>
我的路线是:
get('blockClient','AdminController@blockClient');
get('activateClient','AdminController@activateClient');
get('activateClient','AdminController@deactivateClient');
以下是步骤中的解决方案,它反映了您通过评论向我解释的内容。
前言
首先,你将有两个功能不是三个,激活和停用,我认为停用和阻止用户一样。
现在我想解释它是如何工作的,通常当您在Laravel中提交表单时,您可以通过表单发布数据并在控制器中获取数据以进一步处理。 在我们的情况下,我们希望更新单个或多个选择,因此我们需要将我们想要激活或停用的所有客户端ID传递给我们的控制器。
由于我们可能有多个客户端,因此我们需要像所做的那样将所有选定的客户端作为数组传递给控制器,这非常棒。
在我们的控制器中,我们彻底查看所有选定的客户端,并根据我们的按钮操作激活或停用它们。
正如你在下面的快照中看到的,当我们选择客户端1和2并点击激活时,我们将看到我们的数据库中的表格对于两个选定的客户端都更新为1。
如何测试它?
为了调试你可以使用dd($results);
在$this->activateClient($results);
通过点击激活来查看哪些数据被提交。
激活和停用按钮都会发送相同的选定客户端,但formAction
方法执行不同的操作。
解决方案
这导致了以下解决方案:
1-首先,您应该更正您的路线以接受信息,所以我们可以将带有客户端ID的复选框传递给控制器功能:
get('admin','AdminController@index');
post('admin/action', array('uses' => 'AdminController@formAction'));
管理路径将查看所有客户列表,这仅用于演示和学习,然后您可以稍后更改它,因为它适合您的项目结构。
2-在您的管理员控制器中添加以下功能并记住添加use Appclient;
在AdminController
的命名空间之后:
public function index()
{
$client = Client::all();
return view('Admin', ['client' => $client]);
}
public function formAction()
{
$results = Input::get('status');
if (Input::get('activate'))
{
$this->activateClient($results);
} elseif (Input::get('Deactivate'))
{
$this->deactivateClient($results);
}
return redirect('admin');
}
public function activateClient($client)
{
foreach ($client as $clientId)
Client::findOrNew($clientId)->update(['status' => "1"]);
}
public function deactivateClient($client)
{
foreach ($client as $clientId)
Client::findOrNew($clientId)->update(['status' => "0"]);
}
3-创建管理视图调用它admin.blade.php来查看我们所有的客户端,我们可以激活或停用它们中的每一个,如果我是你,我将使用数据库中的客户端表中的默认值状态为ZERO (0)
:
<p>Admin site | client activate and deactivate page:</p>
{!! Form::open(array('url' => 'admin/action')) !!}
<table width="800px">
<tr>
<td width="10%">Select</td>
<td width="20%">Client id</td>
<td width="20%">Client status</td>
<td width="50%">Client name</td>
</tr>
@foreach ($client as $clientOutput)
<tr>
<td>{!! Form::checkbox('status[]', $clientOutput->id, false, ['id' => $clientOutput->id]) !!}</td>
<td>{{$clientOutput->id}}</td>
<td>{{$clientOutput->status}}</td>
<td>{{$clientOutput->client}}</td>
</tr>
@endforeach
</table>
{!! Form::submit('Activate', ['name' => 'activate']) !!}
{!! Form::submit('Deactivate', ['name' => 'Deactivate']) !!}
{!! Form::close() !!}
结果
在这里,我的测试浏览器看起来如何,您可以检查一个或多个客户端并立即激活或停用它们:
我假设你有客户端模型和迁移。
注意:
这不是一个生产代码,它只是为了演示。 不要直接在生产环境中使用它。 当您在测试环境中进行测试时,以及在测试环境中测试时,比在您的生产环境中执行测试更有效。
链接地址: http://www.djcxy.com/p/88501.html