johannesschobel / laravel-userhistory
提供记录用户每次操作的可能性。
Requires
- php: >=5.5.0
- laravel/framework: >=5.0
This package is not auto-updated.
Last update: 2024-09-20 02:04:27 UTC
README
Laravel Userhistory 是一个包,允许您记录用户在模型上执行的活动。
安装
通过 Composer
$ composer require johannesschobel/laravel-userhistory
入门
通过 composer(见上方)安装此包,或者在您的 composer.json
文件中直接使用
"require" : { ..., "johannesschobel/laravel-userhistory" : "dev-master", ... },
将新包添加到您的 config/app.php
文件中的 providers
'providers' => [ ... JohannesSchobel\UserHistory\UserHistoryServiceProvider::class, ... ],
然后,使用 publish 命令将所需的文件添加到您的项目中
$ php artisan vendor:publish --provider="JohannesSchobel\UserHistory\UserHistoryServiceProvider"
使用以下命令迁移数据库
$ php artisan migrate
然后开始自定义 config/userhistory.php
文件。
配置项 userhistory.models.user
因此引用了您的主体模型。如果您依赖 Laravel 框架,则已正确配置。配置项 userhistory.models.userhistory
,然而,引用了 Userhistory 模型。如果您使用此包提供的模型,则一切正常。
userhistory.actions
引用一个类,提供您想要跟踪的操作。此包已预装了一些默认操作(例如 SHOW
、STORE
、DELETE
等)。但是,您可以简单地创建自己的类文件来添加自己的特定操作
use JohannesSchobel\UserHistory\Enums\UserHistoryEnum; class UserHistoryActions extends UserHistoryEnum { const CREATE = 100; const UPDATE = 101; const DELETE = 102; const PROFILE_CHANGED = 110; const PROFILE_PASSWORD_CHANGED = 111; // and so on.. }
最后,将此包中定义的 UserHistoryTrait
添加到您的 User
模型中,添加以下行
use UserHistoryTrait;
使用
要记录用户操作,只需做类似这样的事情
// assume, that $user is the current user // e.g., $user = Auth::user(); // also assume, that $object is an object to be saved to the database $object->name = "foo"; $object->description = "bar"; $result = $object->save(); if($result) { // create a log entry indicating that the user has updated a given record $history = $user->logAction($object, UserHistoryActions::UPDATE); } // continue with your business logic
要返回给定用户的所有 Userhistory
对象,只需调用
// assume, that $user is the current user // e.g., $user = Auth::user(); $userhistories = $user->userhistories; foreach($userhistories as $userhistory) { $obj = $userhistory->getEntity(); // object is now null (if the entity does not exist) // or it is an object of the given model class! }
更复杂示例
您可以轻松创建某种类型的 时间线
,提供有关用户执行的所有操作的详细信息。在此示例中,我们将使用 League/Fractal,它提供 Transformers
。此外,使用 Laravel 框架。
首先,我们创建一个 UserHistoryTransformer
,可能如下所示
class UserHistoryTransformer extends TransformerAbstract { public function transform(Userhistory $history) { $entity = $history->getEntity(); return [ 'id' => $history->id, 'text' => Lang::get('useractivities.' . strtolower($history->action), [], app()->getLocale()), 'name' => $entity->title, 'uri' => $entity->getSelfURI(), 'created_at' => $history->created_at, ]; } }
接下来,我们将定义相应的端点,这将允许我们检索所有所需的信息。在 Laravel 的路由文件中创建端点 GET /my/activities
。
最后,将相应的控制器方法和转换器连接起来。这可能看起来像这样
class MyController extends Controller { // more methods here public function myActivities(Request $request) { $user = // authenticate the current user from the request (e.g., by using JWT) $histories = $user->userhistories; return $this->response()->collection($histories, new UserHistoryTransformer()); } }
变更日志
请参阅 CHANGELOG 了解最近更改了什么。
安全
如果您发现任何与安全相关的问题,请通过 :author_email 发送电子邮件,而不是使用问题跟踪器。
致谢
- Johannes Schobel [https://github.com/johannesschobel]
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。