在Laravel中激活/停用多个客户端

时间:2015-10-27 18:05:40

标签: checkbox laravel-5 laravel-5.1

我正在使用Laravel 5.1

我有一个客户端表。客户将创建自己的帐户并等待管理员批准。管理员可以随时激活,停用或阻止它们。我有三个链接(如果需要,我可以更改为按钮)表格的底部ACTIVEDEACTIVATE& BLOCK。每一行都有复选框。

现在,我想选择一个或多个客户端,并更改数据库中status表的member字段的值。

以下是我的观点代码:

<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');

1 个答案:

答案 0 :(得分:4)

以下是步骤中的解决方案,它反映了您在评论中向我解释的内容。

前言

首先,你将有两个功能而不是三个,激活和停用,我假设停用与阻止用户相同。

现在我想解释一下这是如何工作的,通常当您在Laravel中提交表单时,您可以通过表单发布数据并获取控制器中的数据以进行进一步处理。在我们的例子中,我们想要更新单个或多个选择,因此我们需要将我们想要激活或停用的所有客户端ID传递给我们的控制器。

由于我们可能有多个客户端,因此我们需要将所有选定的客户端作为数组传递给控制器​​,这很棒。

在我们的控制器中,我们会彻底检查所有选定的客户端,并根据我们的按钮操作激活或停用它们。

正如您在选择客户端1和2并点击激活时可以在以下快照中看到的那样,我们将看到我们在数据库中的表对于两个选定的客户端都更新为1.

如何测试?

要进行调试,您可以在dd($results);之前使用$this->activateClient($results);来查看通过点击激活提交的数据。

激活和停用按钮都会发送相同的选定客户端,但会执行formAction方法的不同操作。

enter image description here

解决方案

这导致以下解决方案:

1-首先,您应该更正您的路线以接受帖子,因此我们可以将带有客户端ID的复选框传递给控制器​​功能:

get('admin','AdminController@index');
post('admin/action', array('uses' => 'AdminController@formAction'));

管理员路径将查看所有客户列表,这仅用于演示和学习,然后您可以根据项目结构更改它。

2-在您的管理员控制器中添加了以下功能,并记得在use App\client;中的命名空间后添加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以查看我们所有的客户端,我们可以激活或停用每个客户端,如果我是你,我将使用数据库中的客户端表中的默认值将状态设置为{{1 }}:

ZERO (0)

结果

在我的测试浏览器中,您可以检查一个或多个客户端,并立即激活或停用它们:

enter image description here

我假设你有客户端模型和迁移。

注意:

这不是生产代码,只是为了演示。不要直接在生产环境中使用它。当您在测试环境中测试它以及何时工作时,请先在生产环境中进行测试。