sofa/model-locking
Composer 安装命令:
composer require sofa/model-locking
包简介
Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.
README 文档
README
Pseudo pessimistic model locking for the Eloquent ORM (Laravel 5.3+).
Installation
Package goes along with Laravel (Illuminate) versioning for your convenience:
Laravel / Illuminate 5.3+:
- require package:
composer require sofa/model-locking:"~5.3" - if you're using Laravel 5.1 - 5.4, add to your
config/app.phpunderproviders:Sofa\ModelLocking\ServiceProvider::class,,
if you're using Laravel 5.5+ the service provider will register itself automatically - publish package assets:
php artisan vendor:publish --provider="Sofa\ModelLocking\ServiceProvider" - create model locks table by running
php artisan migrate - add trait
use \Sofa\ModelLocking\Lockingto the model that should offer locking - OPTIONALLY customize package config in
config/model_locking.php
Usage
Basic example:
// controller public function edit(Post $post) { if ($post->isLocked()) { return response([ 'status' => 'locked', 'message' => 'Resource you are trying to access is locked', 'lock_expiration' => $post->lockedUntil(), ], 423); } return view('posts.edit', compact('post')); } public function update(Post $post) { if ($post->isAccessible(request('lock_token'))) { return redirect()->back() ->withErrors(['danger' => 'Resource you are trying to update is locked']); } $post->update(request()->all()); // broadcasts ModelUnlocked event, so you can push notification // to the user who tried to access locked post. $post->unlock(); return redirect('posts.index'); } public function requestUnlock(Post $post) { if ($post->isAccessible()) { $token = $post->lock('5 minutes', auth()->user()); return response([ 'status' => 'unlocked', 'message' => 'Resource is now locked by you', 'lock_expiration' => $post->lockedUntil(), 'lock_token' => $token, ]); } // broadcasts ModelUnlockRequested event, so you can push // notification to the user who locked the resource. $post->requestUnlock(auth()->user(), request('unlock_message')); } // app/Console/Kernel - it will remove expired locks // AND fire ModelUnlocked event for all of them $schedule->command('locks:flush')->everyMinute(); // Available broadcasting events: // new ModelLocked($post) // new ModelUnlocked($post) // new ModelUnlockRequested($post, $requesting_user, $request_message)
soon more in-depth info, meanwhile take a look at the specs:
/\ /\__ _| |__ | | __ _ _ __ / //_/ _` | '_ \| |/ _` | '_ \ / __ \ (_| | | | | | (_| | | | | \/ \/\__,_|_| |_|_|\__,_|_| |_| Sofa\ModelLocking\Locking ✔ it checks if active lock for model exists ✔ it checks if existing lock is still active ✔ it gets user who locked model ✔ it gets null as timestamp and user if model is not locked ✔ it sets by default authenticated user as one who is locking the model ✔ it unlocks the model on demand ✔ it lets you request unlock of a locked model ✔ it allows setting lock shortening when unlock request is made ✔ it verifies if model can be accessed with provided token ✔ it allows passing user_id as locking user ✔ it allows passing user instance as only param to `lock` method Lock duration precedence ✔ it locks the model for provided time by given user ✔ it next takes `lock_duration` property if set on the model ✔ it then falls back to the config ✔ it finally gets the default value: 5 minutes Fires broadcasting events to make push notifications a cinch ✔ it fires event when model is being locked ✔ it fires event when model is being unlocked ✔ it fires event when unlock request is made, with optional: requesting user and his message Executed 23 of 23 PASS in 0.337 seconds
Contribution
All contributions are welcome, PRs must be tested (using kahlan) and PSR-2 compliant.
sofa/model-locking 适用场景与选型建议
sofa/model-locking 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 48.14k 次下载、GitHub Stars 达 48, 最近一次更新时间为 2016 年 09 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「orm」 「Active Record」 「locking」 「laravel」 「eloquent」 「pessimistic lock」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 sofa/model-locking 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 sofa/model-locking 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 sofa/model-locking 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Propel2 is an open-source Object-Relational Mapping (ORM) for PHP 5.5 and up.
Kinikit - PHP Application development framework MVC component
PHP Interface for Babel Street Text Analytics
A Symfony extension to get active class base on current bundle/controller/action
PHP Database ORM for Symfony1. Do NOT use for new projects: please move to a newest Symfony release and Doctrine2
LDAP user provider bundle for Symfony 6.4
统计信息
- 总下载量: 48.14k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 50
- 点击次数: 24
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-09-04