wanmigs/laravel-status

通过启用/禁用功能和批量更新状态扩展模型状态

安装: 3

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:package

v1.0.0 2019-10-10 01:16 UTC

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形式的路由

... = activedeactivatetoggle* = activationdeactivationtoggle

您还可以为路由定义自定义基本链接

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());
		}
	});
}