如何在 Livewire 中检查应用于电子邮件地址的验证?

问题描述 投票:0回答:1

我有一个 Laravel 应用程序,已从 Laravel 10 升级到 Laravel 11。它位于 Alpine/Docker 容器中。我最初使用

artisan serve
系统作为 Web 服务器,但由于该组件中的错误,我最终升级到 Apache。因此,这个过程导致我从 PHP 8.2 升级到 8.3(我有点想知道我是否应该一次升级一件事,但 Docker 的挑战在某种程度上迫使我这么做)。

看起来整个应用程序正在运行,而不是一件琐碎的事情。我使用的是 Laravel Breeze 制作的 Livewire 登录系统,它完全是现货。但是,升级后,登录将无法工作,尽管没有显示错误,但我可以在“网络”选项卡响应中看到电子邮件地址未通过验证。以前没有这样做过。

因此,我尝试以独立的方式使用电子邮件验证器系统,如下所示:

<?php

use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\RFCValidation;

require_once __DIR__ . '/vendor/autoload.php';

$validator = new EmailValidator();
$ok = $validator->isValid("{redacted email address}", new RFCValidation());
echo $ok ? "OK" : "ERROR";
echo "\n";

在此代码中,电子邮件地址通过了验证。

这是登录表单的片段:

class LoginForm extends Form
{
    #[Validate('required|string|email')]
    public string $email = '';

    #[Validate('required|string')]
    public string $password = '';

    #[Validate('boolean')]
    public bool $remember = false;

如果我从验证注释中删除

email
,它就可以工作。

因此,我如何跟踪此电子邮件检查的 Laravel 版本,看看出了什么问题?我不知道该值是否没有传递给验证器,或者它正在执行过于严格的检查,导致该地址/域失败。

更新

在 Laravel 代码的核心中,我正在进行一些临时更改以记录幕后发生的情况。我发现我可以让第三方电子邮件验证库发出错误和警告,确实有错误:

iconv(): 编码错误,不允许从“WINDOWS-1252”转换为“UTF-8//IGNORE”

错误来自

/project/vendor/symfony/polyfill-mbstring/Mbstring.php
。调用的页面的 HTML 头部有
<meta charset="utf-8">
,所以我不确定 WINDOWS-1252 字符集来自哪里。我想知道我加载的扩展是否不同,这让某些事情感到不安。

我还注意到 phpinfo 中的 iconv 配置相当空白。也许这就是原因?

Screenshot of my iconv PHP config

最后我还注意到我没有加载 mbstring,我也会尝试修复它。

php laravel validation laravel-livewire
1个回答
0
投票

这里的问题是根据我在更新部分的怀疑。 Iconv 安装被破坏,可能是因为我使用 Alpine 而不是 Debian 衍生版本。

虽然我希望可以修复 Iconv 扩展,但我发现安装 Mbstring 更简单。看来优先尝试这个,只有在Mbstring不可用的情况下才使用Iconv。

© www.soinside.com 2019 - 2024. All rights reserved.