使用数组验证值,Laravel 验证。值必须是数组中的一个

Validating a value with an array, Laravel validation. value must be one in the array

我正在尝试通过检查数组中的值来验证该值,这是我目前所拥有的:

$agency_names = Session::get('config.agency-names');
$request->validate([
   'agency-name' => 'required|array:' . $agency_names . ''
]);

$agency_names(输出):

0:
  AgencyID: "A1169"
  AgencyName: "19 London"
  AgencyType: "Agency Plus"

1:
  AgencyID: "A1095"
  AgencyName: "Abbeville Nannies"
  AgencyType: "Affiliate"

如有任何帮助,我们将不胜感激。

更新代码:

$agencies = Session::get('config.agency-names');

$names = array_map(fn($agency_data): string => $agency_data->AgencyName, $agencies);

$request->validate(['agency-name' => 'required', Rule::in($names)]);

更新代码(已解决)

$agencies = Session::get('config.agency-names');
    $agency_names = array();
    for ($x = 0; $x < count($agencies['Agencies']); $x++) {
        $name = $agencies['Agencies'][$x]["AgencyName"];
        array_push($agency_names, $name);
    }

$request->validate(['agency-name' => ['required_if:referral,no', Rule::in($agency_names)]]);

查看有关 Laravel validaion rules 的文档,特别是 in 规则。

假设$agency_names是一个数组,你可以这样做:

use Illuminate\Validation\Rule;

...

$request->validate([
  'agency-name' => [
    'required',
    Rule::in($agency_names),
]);

PS。看到你的$agency_names数组的结构,你应该先用$names = array_map(fn($agency_data): string => $agency_data->AgencyName, $agency_names);映射它。 我还建议将 $agency_names 重命名为 $agencies,因为变量名称具有误导性。