首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 9 php 8.1 enum验证

Laravel 9 php 8.1 enum验证
EN

Stack Overflow用户
提问于 2022-09-21 08:46:19
回答 1查看 284关注 0票数 1

我一直在学习新的枚举课程,并且花了很长一段时间让它通过验证。这只是一个简单的角色枚举。我所得到的错误说:“所选的角色无效,尽管我在console.log(employee)中看到它是每个选择的有效值。

Enum

代码语言:javascript
复制
<?php
namespace App\Enums;

enum RoleEnum: string
{
    case none      = 'none'; //in case role has yet to be assigned
    case employee  = 'employee';
    case manager   = 'manager';
    case admin     = 'admin';
}

模型

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Boss;
use App\Enums\RoleEnum;

class Employee extends Model
{
    use HasFactory;
    protected $fillable = [ 'id', 'name', 'boss_id','title' ];
    protected $casts = [ 'role' => RoleEnum::class];
    
    public function employees()
    {
        return $this->belongsTo('\App\Models\Boss');
    }
}

主计长

代码语言:javascript
复制
    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Models\Boss;
use App\Models\Employee;
use App\Enums\RoleEnum;

class EmployeeController extends Controller
{
public function store(Request $request)
    {
         $request->validate([
            'name'       =>'required|string|max:255',
            'boss_id'    =>'required|exists:bosses,id',
            'title'      =>'string|max:255',
            'role'       =>'required|in:RoleEnum',
        ]); 
        $employee = Employee::create([
            'name'       => $request->name,
            'boss_id'    => $request->boss_id,
            'title'      => $request->title,
            'role'       => $request->role,
        ]);
        $bosses = Boss::get();
        return redirect('/details')->with([
            'employee' => $employee,
            'bosses'   => $bosses,
            'success','User Created!',
        ]);
    }
}

Create刀片输入(我只包含了相关代码)

代码语言:javascript
复制
   <div class="form-group">
      <label for="role">Role</label>
         <select 
            class="form-control" 
            id="role"
            v-model="game.role"
            required
      >
       <option class="form-check-input" type="radio" value='employee'>Employee</option>
       <option class="form-check-input" type="radio" value='manager'>Manager</option>
       <option class="form-check-input" type="radio" value='admin'>Admin</option>
      </select>
  </div>

Consol.log(雇员)

代码语言:javascript
复制
name: "John Martin"
boss_id: "5"
title: "Trainer"
role: "employee"

这对我来说是全新的领域,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-21 09:02:05

您使用的in规则用于特定逗号分隔值的列表。您传递的是枚举的名称,但是in不是这样工作的。

Laravel有一个可以使用的枚举验证规则

代码语言:javascript
复制
use Illuminate\Validation\Rules\Enum;
use App\Enums;

class EmployeeController extends Controller
{
    public function store(Request $request)
    {
         $request->validate([
            'name'       =>'required|string|max:255',
            'boss_id'    =>'required|exists:bosses,id',
            'title'      =>'string|max:255',
            'role'       => [ 'required', new Enum(RoleEnum::class) ],
        ]); 
        $employee = Employee::create([
            'name'       => $request->name,
            'boss_id'    => $request->boss_id,
            'title'      => $request->title,
            'role'       => $request->role,
        ]);
        $bosses = Boss::get();
        return redirect('/details')->with([
            'employee' => $employee,
            'bosses'   => $bosses,
            'success','User Created!',
        ]);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73797847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档