小编rel*_*89n的帖子

PHP 枚举 `__toString` 魔术方法

我想知道为什么不可能提供__toString枚举的实现。

IDE 提示“Enum 可能不包含 '__toString'”。然而,这是我创建枚举后首先想到的事情。以前,我在代码中使用值对象封装字符串,必要时使用字符串转换。现在我想将它们迁移到枚举中,但它们会抵制。

#[Immutable]
enum SaveKlinesFromApiQueue: string
{
    case DEFAULT = 'save_klines_from_api_queue';
    case PRIORITY = 'save_klines_from_api_priority_queue';

    public function __toString(): string
    {
        return $this->value;
    }
}
Run Code Online (Sandbox Code Playgroud)

php enums php-8.1

27
推荐指数
2
解决办法
3万
查看次数

空标签在 PhpStorm (Laravel 7) 中的某些浏览器中不起作用警告

当我想使用 Laravel 7 组件时,PhpStorm 显示一个烦人的警告。我该如何解决此类行为或禁用此警告?

示例警告

intellij-idea phpstorm laravel-7

12
推荐指数
1
解决办法
2809
查看次数

PhpStorm 受保护的属性缺少属性的类型声明

我有\App\Console\Kernel从供应商类别延伸的类别\Illuminate\Foundation\Console\Kernel。在供应商类中,有$commands受保护的属性,没有类型声明,因此在我自己的类中,我无法声明属性类型。

protected $commands = [
        // commands ...
];
Run Code Online (Sandbox Code Playgroud)

但 PhpStorm 给了我下一个错误:

缺少属性的类型声明

检查信息:报告没有类型声明的属性。

该怎么办?

php phpstorm laravel

7
推荐指数
1
解决办法
8378
查看次数

如何在自己的 docker 容器内使用 github actions/checkout@v2

我有自己的 php 图像,我想将其用于我的项目来运行测试。

container: rela589n/doctrine-event-sourcing-php:latest

services:
  test_db:
    image: postgres:13-alpine
    env:
      POSTGRES_DB: des
      POSTGRES_USER: des_user
      POSTGRES_PASSWORD: p@$$w0rd

steps:
  - uses: actions/checkout@v2

  - whatever_needed_to_run_tests_inside_container
Run Code Online (Sandbox Code Playgroud)

结帐操作失败并出现以下错误:

EACCES: permission denied, open '/__w/doctrine-event-sourcing/doctrine-event-sourcing/6977c4d4-3881-44e9-804e-ae086752556e.tar.gz'
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的,因为在新的 docker 容器中没有这样的文件夹结构。我想做的是在提供的虚拟机内运行结帐操作runs-on: ubuntu-20.04并为 docker 配置卷,以便它可以访问代码。但是我不知道这样做不是一个好的做法,也不知道如何实施。我想即使可以这样做,它也不适用于其他操作。

php containers github docker github-actions

7
推荐指数
1
解决办法
1549
查看次数

Laravel ShouldBeUnique 并不能让工作变得独一无二

我预计标有ShouldBeUnique接口的作业不会被多次调度。然而,所有工作都像平常一样调度。

在我的 .env 文件中,redis 设置为用于队列连接以及缓存驱动程序:

QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
Run Code Online (Sandbox Code Playgroud)

我有两个正在运行的队列工作人员,它们竞争队列中的作业。

要推送作业,有控制台命令:

QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
Run Code Online (Sandbox Code Playgroud)

作业类如下所示(注意uniqueId是相同的):

class TestUnique extends Command
{
    protected $signature = 'test:unique';
    protected $description = 'Command description';

    private Dispatcher $dispatcher;

    public function __construct(Dispatcher $dispatcher)
    {
        parent::__construct();
        $this->dispatcher = $dispatcher;
    }

    public function handle()
    {
        $this->dispatcher->dispatch(new SomeJob(1));
        $this->dispatcher->dispatch(new SomeJob(2));
        $this->dispatcher->dispatch(new SomeJob(3));
        $this->dispatcher->dispatch(new SomeJob(4));
        $this->dispatcher->dispatch(new SomeJob(5));

        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦我们运行控制台命令来调度作业,所有这些作业都会像通常没有ShouldBeUnique. 日志:

queue_worker_2       | [2021-10-04 08:07:44][p0j7QmQt7JNFEWUoxdaEOuheJiPFTYrh] Processing: App\Console\Commands\SomeJob
queue_worker_2       | string(14) "start handle 1"
queue_worker_1       | [2021-10-04 …
Run Code Online (Sandbox Code Playgroud)

php queue redis laravel

6
推荐指数
0
解决办法
2314
查看次数