【问题标题】:Laravel livewire expression is not allowed here when using $this使用 $this 时,此处不允许使用 Laravel livewire 表达式
【发布时间】:2021-11-30 22:58:26
【问题描述】:

我正在使用 Laravel Livewire 构建一个带有实时验证的 EditModal。

为了实现验证,我必须像这样定义$rules 属性:

 <?php 
 //...
//REAL-TIME VALIDATION (https://devdojo.com/tnylea/snippet/laravel-livewire-real-time-validation)
protected $rules = [
    'name'=>'required|min:4|min:2|max:255',
    'guard_name'=>'required|min:2|max:255',
    'permission'=>'required|min:2|max:255'
    'description'=>'required|min:5|max:255'
];

但是,当我尝试验证除当前记录之外的唯一性时,我觉得有必要使用$this-&gt;record_id

<?php
//...
    protected $rules = [
        'name'=>'required|min:4|min:2|max:255|unique:permissions,name,'.$this->record_id,
        'guard_name'=>'required|min:2|max:255',
        'permission'=>'required|min:2|max:255|unique:permissions,permission,'.$this->record_id,
        'description'=>'required|min:5|max:255'
    ];

但我现在面临的错误是:

表达式不允许作为字段默认值

常量表达式包含无效操作

嗯,这意味着我不能使用$this 来调用包含记录ID 的属性。

那么我该如何解决这个问题?如何访问 $rules 属性中的当前 ID?

【问题讨论】:

    标签: laravel-livewire


    【解决方案1】:

    基于this Livewire forum,我必须像这样创建一个受保护的函数:

    <?php
    // ...
    protected function rules() //https://forum.laravel-livewire.com/t/livewire-update-validation-on-unique-field/2930/2
        {
            return [
                'name'=>'required|min:4|min:2|max:255|unique:permissions,name,'.$this->record_id,
                'guard_name'=>'required|min:2|max:255',
                'permission'=>'required|min:2|max:255|unique:permissions,permission,'.$this->record_id,
                'description'=>'required|min:5|max:255'
            ];
        }
    

    然后像这样在我的提交方法中调用它:

    <?php
    //..
        public function permissionUpdate()
        {
            $this->validate();
            //... update the record
        }
    

    这样就成功了

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2018-05-15
      • 2023-03-04
      • 2014-05-28
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      相关资源
      最近更新 更多