我正在应用程序/规则命名空间中创建一个laravel定制的UpperCase.php规则,以判断提交的标题是否以大写字母开头,如果不是,则应抛出错误/失败.

   class ArticleController extends Controller
    {
        public function store(Request $request)
        {
            $request->validate([
      
                'title' => ['required', new Uppercase()]
            ]);
    
            Article::create(['title' => $request->title]);
        }
    }
    
    

这是Uppercase.php类中的代码. 我正在判断标题的第一个字符是否大写

    use Closure;
    use Illuminate\Contracts\Validation\ValidationRule;
    
    class Uppercase implements ValidationRule
    {
        
        public function validate(string $attribute, mixed $value, Closure $fail): void
        {
        if (ucfirst($value) !== $value) {
                $fail("The $attribute must start with an uppercase letter.");
            }
        }
    }

更多细节

在运行测试时,仍然失败

推荐答案

您可以使用以下选项更改验证.值首先转换为小写,然后应用ucfirst

use Closure;
use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule
{
    public function passes($attribute, $value)
    {
        $firstCharOfTitle = Str::substr($value, 0, 1);
        return Str::ucfirst($firstCharOfTitle) === $firstCharOfTitle;
    }

    public function message()
    {
        return 'The :attribute must start with an uppercase letter.';
    }
}

我想知道为什么要创建自定义验证规则来判断第一个字符是不是大写.

在将值存储到数据库时,可以应用相同的转换,如下所示.

Article::create(['title' => Str::ucfirst($request->title)]);

确保你进口了Illuminate\Support\Str

Php相关问答推荐

调用woocommerce_customer_Save_add动作挂钩时发生致命错误

Laravel有一个具有两个匹配字段

无法添加ProxyClass__setInitialized()上的忽略

Woocommerce自定义变体html表仅显示带值的列

如何在不指定symfony列的情况下从数据库中获取行数组

WooCommerce在store 页面上显示兼容多语言的产品属性

仅在WooCommerce管理订单视图上显示订单项自定义元数据

EBay Inventory API createOrReplaceInventoryItem出错

无法使用php IMAP从Gmail获取收件箱

函数存储到变量中

为什么PHP PDO忽略NOT NULL约束?

Azure应用程序无法访问共享文件夹

随机显示WordPress快捷代码功能时出现问题

WooCommerce 以编程方式添加的费用不会持续存在

向元素添加类时添加循环错误

Shopware 6.4.20店铺激活问题

如何从此字符串创建 Carbon 对象:2022-06-21T05:52:46.648533678Z?

Laravel 查询关系是否为 bool

获取具有所有特定相关模型的模型

WordPress 函数 get_post(post_id) 是否查询数据库?