Laravel - eloquent.saved 模型的事件没有被触发
Laravel - eloquent.saved event for model is not getting fired
问题描述
我一直在努力让 captainhook 为模特工作,但未能如愿。 Captainhook 是一个 php 库,它允许我们添加 URL 和 eloquent 或自定义事件,用于将事件数据发送到我们根据事件作为 HTTP post 请求指定的那些 URL。
我不确定我在哪里做错了,但我假设 Laravel 没有触发 eloquent.saved
或任何其他事件。我遵循了自述文件中提到的所有确切说明。
以下是我的项目文件,可能有助于解决问题:
非常感谢任何帮助。
php artisan hook:list
+----+-----------+------------------------+----------------------------+
| id | tenant_id | url | event |
+----+-----------+------------------------+----------------------------+
| 7 | | http://localhost:10000 | eloquent.saved \App\Vessel |
+----+-----------+------------------------+----------------------------+
composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.2.39",
"league/flysystem-aws-s3-v3": "~1.0",
"venturecraft/revisionable": "1.*",
"maknz/slack": "^1.7",
"phpmailer/phpmailer": "^5.2",
"snowfire/beautymail": "dev-master",
"mpociot/captainhook": "~2.0",
"doctrine/dbal": "^2.5",
"predis/predis": "^1.1",
"torann/currency": "^0.3.0",
"yajra/laravel-datatables-oracle": "~6.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"symfony/css-selector": "2.8.*|3.0.*",
"symfony/dom-crawler": "2.8.*|3.0.*"
},
"autoload": {
"classmap": [
"database",
"app/Libraries/ImageUploaderPHP"
],
"psr-4": {
"App\": "app/"
},
"files": [
"app/Support/helpers.php"
]
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\Foundation\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"process-timeout": 0
}
}
.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=1yoaL71DDzGvey0BwVy25hySFMdBaEoA
DB_HOST=127.0.0.1
DB_DATABASE=myfyba
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=localhost
....
config/captain_hook.php
<?php
/**
* This file is part of CaptainHook arrrrr.
*
* @license MIT
*/
return [
/*
|--------------------------------------------------------------------------
| Event listeners
|--------------------------------------------------------------------------
|
| This array allows you to define all events that Captain Hook should
| listen for in the application. By default, the Captain will just
| respond to eloquent events, but you may edit this as you like.
*/
'listeners' => ['eloquent.*'],
/*
|--------------------------------------------------------------------------
| Webhook filter closure
|--------------------------------------------------------------------------
|
| If your webhooks are scoped to a tenant_id, you can modify
| this filter function to return only the webhooks for your
| tenant. This function is applied as a collection filter.
| The tenant_id field can be used for verification.
|
*/
'filter' => function ($webhook) {
return true;
},
/*
|--------------------------------------------------------------------------
| Webhook data transformer
|--------------------------------------------------------------------------
|
| The data transformer is a simple function that allows you to take the
| subject data of an event and convert it to a format that will then
| be posted to the webhooks. By default, all data is json encoded.
| The second argument is the Webhook that was triggered in case
| you want to transform the data in different ways per hook.
|
| You can also use the 'Foo\Class@transform' notation if you want.
|
*/
'transformer' => function ($eventData, $webhook) {
return json_encode($eventData);
},
/*
|--------------------------------------------------------------------------
| Webhook response callback
|--------------------------------------------------------------------------
|
| The response callback can be used if you want to trigger
| certain actions depending on the webhook response.
| This is unused by default.
|
| You can also use the 'Foo\Class@handle' notation if you want.
|
*/
'response_callback' => function ($webhook, $response) {
// Handle custom response status codes, ...
},
/*
|--------------------------------------------------------------------------
| Logging configuration
|--------------------------------------------------------------------------
|
| Captain Hook ships with built-in logging to allow you to store data
| about the requests that you have made in a certain time interval.
*/
'log' => [
'active' => true,
'storage_quantity' => 50,
],
];
该包的文档说 Eloquent 将为 App\User
模型的 updated
事件触发一个名为 eloquent.updated \App\User
的事件,但它实际上会触发一个名为 [=13] 的事件=].
尝试将您的 webhook 更改为:
eloquent.saved: App\Vessel
问题描述
我一直在努力让 captainhook 为模特工作,但未能如愿。 Captainhook 是一个 php 库,它允许我们添加 URL 和 eloquent 或自定义事件,用于将事件数据发送到我们根据事件作为 HTTP post 请求指定的那些 URL。
我不确定我在哪里做错了,但我假设 Laravel 没有触发 eloquent.saved
或任何其他事件。我遵循了自述文件中提到的所有确切说明。
以下是我的项目文件,可能有助于解决问题:
非常感谢任何帮助。
php artisan hook:list
+----+-----------+------------------------+----------------------------+
| id | tenant_id | url | event |
+----+-----------+------------------------+----------------------------+
| 7 | | http://localhost:10000 | eloquent.saved \App\Vessel |
+----+-----------+------------------------+----------------------------+
composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.2.39",
"league/flysystem-aws-s3-v3": "~1.0",
"venturecraft/revisionable": "1.*",
"maknz/slack": "^1.7",
"phpmailer/phpmailer": "^5.2",
"snowfire/beautymail": "dev-master",
"mpociot/captainhook": "~2.0",
"doctrine/dbal": "^2.5",
"predis/predis": "^1.1",
"torann/currency": "^0.3.0",
"yajra/laravel-datatables-oracle": "~6.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"symfony/css-selector": "2.8.*|3.0.*",
"symfony/dom-crawler": "2.8.*|3.0.*"
},
"autoload": {
"classmap": [
"database",
"app/Libraries/ImageUploaderPHP"
],
"psr-4": {
"App\": "app/"
},
"files": [
"app/Support/helpers.php"
]
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\Foundation\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"process-timeout": 0
}
}
.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=1yoaL71DDzGvey0BwVy25hySFMdBaEoA
DB_HOST=127.0.0.1
DB_DATABASE=myfyba
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=localhost
....
config/captain_hook.php
<?php
/**
* This file is part of CaptainHook arrrrr.
*
* @license MIT
*/
return [
/*
|--------------------------------------------------------------------------
| Event listeners
|--------------------------------------------------------------------------
|
| This array allows you to define all events that Captain Hook should
| listen for in the application. By default, the Captain will just
| respond to eloquent events, but you may edit this as you like.
*/
'listeners' => ['eloquent.*'],
/*
|--------------------------------------------------------------------------
| Webhook filter closure
|--------------------------------------------------------------------------
|
| If your webhooks are scoped to a tenant_id, you can modify
| this filter function to return only the webhooks for your
| tenant. This function is applied as a collection filter.
| The tenant_id field can be used for verification.
|
*/
'filter' => function ($webhook) {
return true;
},
/*
|--------------------------------------------------------------------------
| Webhook data transformer
|--------------------------------------------------------------------------
|
| The data transformer is a simple function that allows you to take the
| subject data of an event and convert it to a format that will then
| be posted to the webhooks. By default, all data is json encoded.
| The second argument is the Webhook that was triggered in case
| you want to transform the data in different ways per hook.
|
| You can also use the 'Foo\Class@transform' notation if you want.
|
*/
'transformer' => function ($eventData, $webhook) {
return json_encode($eventData);
},
/*
|--------------------------------------------------------------------------
| Webhook response callback
|--------------------------------------------------------------------------
|
| The response callback can be used if you want to trigger
| certain actions depending on the webhook response.
| This is unused by default.
|
| You can also use the 'Foo\Class@handle' notation if you want.
|
*/
'response_callback' => function ($webhook, $response) {
// Handle custom response status codes, ...
},
/*
|--------------------------------------------------------------------------
| Logging configuration
|--------------------------------------------------------------------------
|
| Captain Hook ships with built-in logging to allow you to store data
| about the requests that you have made in a certain time interval.
*/
'log' => [
'active' => true,
'storage_quantity' => 50,
],
];
该包的文档说 Eloquent 将为 App\User
模型的 updated
事件触发一个名为 eloquent.updated \App\User
的事件,但它实际上会触发一个名为 [=13] 的事件=].
尝试将您的 webhook 更改为:
eloquent.saved: App\Vessel