wanmigs / laravel-status
通过启用/禁用功能和批量更新状态扩展模型状态
v1.0.0
2019-10-10 01:16 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-14 12:54:44 UTC
README
要为模型启用状态,请在模型上使用 Fligno\User\Traits\HasStatus
特性
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Fligno\User\Traits\HasStatus class Flight extends Model { use HasStatus; }
还应将 is_active
列添加到您的数据库表中。
Schema::table('users', function (Blueprint $table) { $table->boolean('is_active')->default(0); });
现在,您可以在模型上调用 activate
方法,将 is_active
列设置为 1
。对于禁用,使用模型上的 deactivate
方法,使用 toggleStatus
切换 is_active
列为真/假。
要确定给定的模型实例是否已激活,请使用 isActive()
方法
if ($user->isActive()) { // }
扩展控制器方法
要为控制器启用状态,请在控制器上使用 Fligno\User\Traits\ManageStatus
特性并创建变量 protected $model = 'App\User'
<?php namespace App\Http\Controllers; use Fligno\User\Traits\ManageStatus; class UserController extends Controller { use ManageStatus; protected $model = 'App\User'; }
控制器中的可用方法
现在您可以将此内容添加到您的 routes/web.php
<?php Route::post('/user/active/{id}', 'UserController@activate')->name('user.activation'); Route::post('/user/deactivate/{id}', 'UserController@deactivate')->name('user.deactivation'); Route::post('/user/toggle/{id}', 'UserController@toggleStatus')->name('user.toggle'); Route::post("/user/bulk/update", "UserController@bulkStatusUpdate")->name("user.bulkUpdate");
或者您可以直接将此函数添加到您的 routes/web.php
<?php use Fligno\User\UserStatus; UserStatus::routes(['UserController']);
对于多个控制器。
UserStatus::routes(['UserController', 'MemberController']);
这将生成上述kebab case形式的路由
...
= active
、deactivate
和 toggle
,*
= activation
、deactivation
和 toggle
您还可以为路由定义自定义基本链接
UserStatus::routes(['UserController' => 'custom-user']);
这将生成上述kebab case形式的路由
/custom-user/../{id}
路由名称: custom-user.*
单元测试
/** @test */ public function a_user_can_activate_user() { $user = factory('App\User')->create(); $this->postJson(route('user.activation', $user->id)); tap($user->fresh(), function ($user) { $this->assertTrue($user->isActive()); }); } /** @test */ public function a_user_can_deactivate_user() { $user = factory('App\User')->create(['is_active' => true]); $this->postJson(route('user.deactivation', $user->id)); tap($user->fresh(), function ($user) { $this->assertFalse($user->isActive()); }); } /** @test */ public function a_user_can_toggle_user_status() { $user = factory('App\User')->create(['is_active' => true]); $this->postJson(route('user.toggle', $user->id)); tap($user->fresh(), function ($user) { $this->assertFalse($user->isActive()); }); } /** @test */ public function a_user_can_update_mulitple_user_status() { $users = factory('App\User', 5)->create(['is_active' => false]); $ids = $users->pluck('id')->all(); $this->postJson(route('user.bulkUpdate'), [ 'ids' => $ids, 'status' => true ]); tap($users->fresh(), function ($users) { foreach ($users as $user) { $this->assertTrue($user->isActive()); } }); }