찾다
PHP 프레임워크LaravelLaravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

일상적으로 일부 사용자 작업 이벤트를 처리할 때 나중에 참조하거나 빅데이터 통계를 위해 기록해야 하는 경우가 있습니다.


Laravel은 모델 이벤트를 처리하는 데 매우 편리합니다: https://laravel-china.org/docs/laravel/5.5/eloquent#events


Laravel의 모델 이벤트에는 두 가지 방법이 있습니다.

  • settingsdispatchesEvents속성 매핑 이벤트 클래스
  • dispatchesEvents属性映射事件类
  • 使用观察器来注册事件,这里介绍第二种
  • 新建模型

php artisan make:model Log

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Log extends Model
{
    protected $fillable = [&#39;user_name&#39;, &#39;user_id&#39;, &#39;url&#39;, &#39;event&#39;, &#39;method&#39;, &#39;table&#39;, &#39;description&#39;];
}
  • 创建迁移表:

php artisan make:migration create_logs_table

  • 表的结构大概是这样,可按需设计
<?php use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateLogsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create(&#39;logs&#39;, function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('user_id')->comment('操作人的ID');
            $table->string('user_name')->comment('操作人的名字,方便直接查阅');
            $table->string('url')->comment('当前操作的URL');
            $table->string('method')->comment('当前操作的请求方法');
            $table->string('event')->comment('当前操作的事件,create,update,delete');
            $table->string('table')->comment('操作的表');
            $table->string('description')->default('');
            $table->timestamps();
        });

        DB::statement("ALTER TABLE `logs` comment '操作日志表'");
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('logs');
    }
}
  • 运行迁移生成表

php artisan migrate

  • 新建一个服务提供者统一注册所有的模型事件观察器(后面的名字可以自己起得形象一点)

php artisan make:provider ObserverLogServiceProvider

  • /config/app.php中的providers数组注册(大概如图中)

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • app目录下新建文件夹Observers存放模型观察器,并新建基类LogBaseServer并在构造函数构建基本属性(CLI是因为在命令行执行时不存在用户执行)

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • 新建一个观察器继承基类LogBaseServerUser模型,方法的名字要对应文档中的事件)

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • 到新建的服务提供者ObserverLogServiceProvider中运行

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • 为需要的模型注册事件(我这挺多的,之后大概长这样)

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • 然后我们触发一些事件(增删改,表的数据就有了)

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명


  • 多对多的关联插入不会出触发模型(比如attach方法)
  • 这时候就需要自己新建事件类来模拟(这里拿分配权限给角色粗略说一下)

1.在EventServiceProvider中的listen属性绑定好事件

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

2.事件PermissionRoleEvent中的注入两个参数,一个是角色,另一个是attach或者detach관찰자를 사용하여 이벤트를 등록합니다. 두 번째 방법은 다음과 같습니다.

새 모델

php artisan make: model Log code><span class="img-wrap">rrreee<img class="lazy lazy" src="/static/imghwm/default1.png" data-src="/img/remote/1460000013815118?w=1345&h=665" referrerpolicy="no-referrer" alt="" title=""><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/image/492/109/627/1627023592973459.png?x-oss-process=image/resize,p_40" class="lazy" title="1627023592973459.png" alt="Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명">마이그레이션 테이블 생성:</span><code>php artisan make:migration create_logs_table

🎜🎜테이블의 구조는 대략 다음과 같으며 다음과 같이 설계할 수 있습니다. 필요 rrreee🎜🎜마이그레이션 생성 테이블 실행 🎜php artisan migration🎜🎜🎜모든 모델 이벤트를 균일하게 등록하기 위해 새로운 서비스 공급자 생성 관찰자(후자의 이름은 여러분이 더 생생할 수 있습니다)🎜php artisan make:provider ObserverLogServiceProvider🎜🎜🎜to /config/app.php providers 배열 등록(아마도 그림에 표시됨)🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜🎜 app 디렉터리에 모델 관찰자를 저장할 새 폴더 Observers를 만들고, 새로운 기본 클래스 LogBaseServer 및 생성자에 기본 속성 구축(CLI는 명령줄에서 실행할 때 사용자 실행이 없기 때문입니다)🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜🎜기본 클래스를 상속할 새 관찰자를 만듭니다. 코드>LogBaseServer ( 🎜User🎜 모델, 메소드 이름 문서의 이벤트에 대응)🎜🎜 Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜🎜새로 생성된 서비스 공급자 ObserverLogServiceProvider로 이동하여 실행🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜🎜필요한 모델에 대한 이벤트를 등록합니다. 그 중 아마도 그럴 것이다. 앞으로는 이렇게 될 것입니다)🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜🎜 그런 다음 몇 가지 이벤트(추가, 삭제, 수정, 테이블 데이터가 있습니다)를 트리거합니다.🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜 🎜🎜🎜🎜다대다 연관 삽입은 트리거 모델을 생성하지 않습니다(예: 첨부 방법)🎜이번에는 이를 시뮬레이션하기 위해 새 이벤트 클래스를 생성해야 합니다. (여기서는 대략적으로 역할에 권한을 할당합니다.) 이에 대해 이야기합니다.)🎜1. EventServiceProvider🎜🎜🎜Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명🎜🎜🎜2. PermissionRoleEvent 이벤트에 두 개의 매개변수를 삽입합니다. 하나는 role이고 다른 하나는 attach 또는 분리🎜🎜🎜🎜🎜🎜🎜

3. 이벤트 리스너 PermissionRoleEventLog도 기본 클래스 LogBaseServer를 상속합니다. 여기서는 전달된 배열 ID에 따라 순회한 다음 로그 PermissionRoleEventLog也继承基类LogBaseServer,这里就是根据传入的数组id遍历,然后创建日志

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

4.之后应用事件

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명


  • 更优雅的处理登录注销事件

1.在EventServiceProvider中的subscribe

Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명4. 이벤트는 추후 적용

82821acbffec3f624d392f5b2cb3b44.png

  • honthout and er hone and geation and geation li>1 EventServiceProvidersubscribe 속성을 ​​처리된 클래스

    Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

    2에 바인딩합니다.

    Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명

  • 3. 그 후의 효과는 다음과 같습니다:

    🎜🎜🎜관련 권장 사항: 🎜최신 5개 Laravel 비디오 튜토리얼🎜🎜🎜 🎜🎜

    위 내용은 Laravel 모델 이벤트의 두 가지 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

    php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

    php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

    实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

    php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

    php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

    php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

    php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

    php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

    在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

    php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

    判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

    php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

    方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

    php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

    查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    SecList

    SecList

    SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

    Dreamweaver Mac版

    Dreamweaver Mac版

    시각적 웹 개발 도구

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 최신 버전