PHP code example of riven / hyperf-callee

1. Go to this page and download the library: Download riven/hyperf-callee library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

riven / hyperf-callee example snippets


return [
    Callee\ConfigProvider::class,
];



namespace App\Event;

use Callee\CalleeEvent;
use Callee\CalleeEventTrait;

enum Action: string implements CalleeEvent
{
    use CalleeEventTrait;

    case Create = 'create';
    case Update = 'update';
    case Delete = 'delete';
    case Read = 'read';
}



namespace App\Service;

use App\Event\Action;
use Callee\Annotation\Callee;

class UserService
{
    #[Callee(Action::Create)]
    public function createUser(string $name, string $email): array
    {
        // 处理创建用户的逻辑
        return ['id' => 1, 'name' => $name, 'email' => $email];
    }

    #[Callee(Action::Update, async: true)]
    public function updateUser(int $id, array $data): bool
    {
        // 处理更新用户的逻辑
        return true;
    }
}



use App\Event\Action;
use App\Service\UserService;
use Callee\Annotation\Callee;
use Callee\CalleeCollector;

// 注册事件处理方法
CalleeCollector::addCallee(
    [UserService::class, 'createUser'],
    new Callee(Action::Create)
);

// 注册异步事件处理方法
CalleeCollector::addCallee(
    [UserService::class, 'updateUser'],
    new Callee(Action::Update, async: true)
);



use App\Event\Action;
use function Callee\call;

// 调用同步事件处理方法
$result = call(Action::Create, ['name' => 'John', 'email' => '[email protected]']);
echo "创建用户结果: " . json_encode($result) . "\n";

// 调用异步事件处理方法
call(Action::Update, ['id' => 1, 'data' => ['name' => 'John Doe']]);
echo "更新用户任务已提交\n";



use App\Event\Action;
use App\Service\UserService;
use Callee\Annotation\Callee;

class AdminUserService extends UserService
{
    #[Callee(Action::Create, scope: 'admin')]
    public function createAdminUser(string $name, string $email): array
    {
        // 处理创建管理员用户的逻辑
        return ['id' => 1, 'name' => $name, 'email' => $email, 'role' => 'admin'];
    }
}

// 调用特定作用域的事件处理方法
use function Callee\call;

$result = call(Action::Create, ['name' => 'Admin', 'email' => '[email protected]'], scope: 'admin');
echo "创建管理员用户结果: " . json_encode($result) . "\n";



use App\Event\Action;
use Callee\Annotation\Callee;

class LoggingService
{
    #[Callee(Action::Create, priority: 10)]
    public function logBeforeCreate(string $name, string $email): void
    {
        echo "开始创建用户: $name\n";
    }
}

class UserService
{
    #[Callee(Action::Create, priority: 5)]
    public function createUser(string $name, string $email): array
    {
        // 处理创建用户的逻辑
        return ['id' => 1, 'name' => $name, 'email' => $email];
    }
}

class NotificationService
{
    #[Callee(Action::Create, priority: 1)]
    public function notifyUserCreated(string $name, string $email): void
    {
        echo "用户 $name 创建成功,已发送通知\n";
    }
}



use App\Event\Action;
use Callee\Annotation\Callee;

class UserService
{
    #[Callee(Action::Create, afterCommit: true)]
    public function createUser(string $name, string $email): array
    {
        // 处理创建用户的逻辑
        return ['id' => 1, 'name' => $name, 'email' => $email];
    }
}



namespace App;

use Callee\Annotation\Callee;
use Callee\CalleeEvent;
use Callee\CalleeEventTrait;
use function Callee\call;

enum OrderEvent: string implements CalleeEvent
{
    use CalleeEventTrait;

    case Create = 'order.create';
    case Pay = 'order.pay';
    case Ship = 'order.ship';
    case Complete = 'order.complete';
}

class OrderService
{
    #[Callee(OrderEvent::Create)]
    public function createOrder(array $items, string $userId): array
    {
        // 创建订单逻辑
        $orderId = uniqid();
        return ['id' => $orderId, 'items' => $items, 'userId' => $userId, 'status' => 'created'];
    }

    #[Callee(OrderEvent::Pay, async: true)]
    public function payOrder(string $orderId, string $paymentMethod): bool
    {
        // 支付订单逻辑
        return true;
    }

    #[Callee(OrderEvent::Ship, priority: 5)]
    public function shipOrder(string $orderId, string $address): bool
    {
        // 发货逻辑
        return true;
    }

    #[Callee(OrderEvent::Complete, afterCommit: true)]
    public function completeOrder(string $orderId): bool
    {
        // 完成订单逻辑
        return true;
    }
}

// 使用示例
$order = call(OrderEvent::Create, [
    'items' => [['id' => 1, 'quantity' => 2], ['id' => 2, 'quantity' => 1]],
    'userId' => 'user123'
]);
echo "订单创建成功: " . $order['id'] . "\n";

call(OrderEvent::Pay, [
    'orderId' => $order['id'],
    'paymentMethod' => 'credit_card'
]);
echo "订单支付中...\n";

call(OrderEvent::Ship, [
    'orderId' => $order['id'],
    'address' => '北京市朝阳区'
]);
echo "订单发货中...\n";

call(OrderEvent::Complete, [
    'orderId' => $order['id']
]);
echo "订单完成\n";