定制 hyperlink/laravel-model-locking 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hyperlink/laravel-model-locking

最新稳定版本:0.3.0

Composer 安装命令:

composer require hyperlink/laravel-model-locking

包简介

Wordpress like locking feature for Laravel-Models.

README 文档

README

Installation

You can install the package via composer:

composer require hyperlink/laravel-model-locking

You can publish the config file with:

php artisan vendor:publish --provider="Hylk\Locking\ModelLockingServiceProvider" --tag="model-locking-config"

You can publish the translation files with:

php artisan vendor:publish --provider="Hylk\Locking\ModelLockingServiceProvider" --tag="model-locking-translations"

You can publish the vue-components via:

php artisan vendor:publish --provider="Hylk\Locking\ModelLockingServiceProvider" --tag="model-locking-vue"

Usage

Setting up your models

Within a model just use the IsLockable-Trait.

class Post extends Model { use \Hylk\ModelLocking\IsLockable; ... }

Additionally you have to extend the database-tables for the Model.

return new class extends Migration { public function up() { Schema::table('posts', function (Blueprint $table) { $table->lockfields(); }); } public function down() { Schema::table('posts', function (Blueprint $table) { $table->dropLockfields(); }); } }

simple Model-Locking

If you want just a simple version of the locking, just use the Traits methods within your controller. HEARTBEAT_LOCK_DURATION should be set to something like 15 minutes (900 seconds).

class PostController { public function show(Post $post) { $post->lock(); } public function update(Request $request, Post $post) { $post->update($request->all()); $post->unlock(); } }

To make sure no locks are missed you should use the locking:release Artisan command in your scheduler. Additionally, you should publish the config and set the lock duration to around 15 minutes.

Model-Locking by heartbeat (Vue)

The more advanced approach is to handle the locks via a heartbeat. This only works for Vue and axios.

  1. Publish the vue-components
  2. register the global HeartbeatManager
    import Vue from 'vue'; import HeartbeatManager from './vendor/hylk/laravel-model-locking/heartbeat-manager'; ... window.axios = require('axios'); ... Vue.use(HeartbeatManager);
  3. register the Listener-Components
    1. for index-pages
    <template> <div> <HeartbeatListener model-class="App\Models\Post" :model-id="model_id" @locked="setLockState" @unlocked="deleteLockState" /> ... </div> </template>
    Handle the wished behavior like showing the current locker by the lock event and delete this information on the unlock-event.
    ... <span v-if="isLocked(model_id)">Locked by {{ getLock(model_id).locked_by.name }}</span> ...
  4. register the LockRefresher on your Edit-form.
    <template> <div> <HeartbeatLockRefresher model-class="App\Models\Post" :model-id="model_id" @lost="reloadRoute()" /> ... </div> </template>
    The lost-Event shows if the component tries to render if the model is locked by another user than the logged in.

Environment variables

Variable Default Description
HEARTBEAT_LOCK_DURATION 70 The time in seconds a model is locked.
MIX_HEARTBEAT_REFRESH 60 The time in seconds between the heartbeats. Should be a multiple of the MIX_HEARTBEAT_STATUS-interval.
MIX_HEARTBEAT_STATUS 30 The time in seconds between the heartbeats for status-request (index-Listener).
MIX_HEARTBEAT_ENABLED true Activates or deactivates the heartbeats.

config

Beside the environment variables, there is a middleware key to determine the middleware(s) used by the heartbeat-route. Default it's set to api.

统计信息

  • 总下载量: 5.26k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 3
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固