【问题标题】:Concaternate Array value with Ternary Operator result将数组值与三元运算符结果连接起来
【发布时间】:2020-11-16 09:02:20
【问题描述】:

我正在使用 PHP 7 和 Laravel 6。当我制定用户请求规则并在用户控制器中使用它时出现错误。我制定的请求规则是在创建和更新函数中可重用,所以如果我传递用户的 id,它将验证除该 id 之外的用户的唯一性。但如果不是,它将搜索所有 id 并验证它是否是唯一的。我在这里遵循 BaM 解决方案:https://stackoverflow.com/a/24205849

这是我的 UserRequest.php:

public static function rules ($id=0, $merge=[]) {
    return array_merge(
        [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users' . ($id ? ",$id" : ''),
            'phone_number' => 'required|string|min:9|max:10|unique:users' . ($id ? ",$id" : ''),
            'user_img' => 'required|mimes:jpeg,jpg,png,gif|max:10000',
        ], 
            $merge);
}

这是我的用户控制器:


public function store(Request $request)
  {
    $extend_rules = [
      'pass'       => 'required|string|min:8',
  ];

    $validator = Validator::make($request->all(), UserRequest::rules($extend_rules));

    if ($validator->fails())
    {
      return redirect()->back();
    }

    $user = User::create([
      'name' => $request->name,
      'email' => $request->email,
      'password' => Hash::make($request->pass),
      'phone_number' => $request->phone_number,
      'user_img' => $request->user_image->store('user_img'),
    ]);

    $user->save();

    Session::flash('message', 'Your account is successfully created !');
    Session::flash('alert-class', 'alert alert-success');
    

    return redirect()->route('users.index');
    
  }

我得到了这个错误:

ErrorException:数组到字符串的转换

我试图寻找解决方案,但似乎找不到任何适合我的情况。

如果有人知道,请帮助我!

【问题讨论】:

  • 好吧,UserRequest::rules 期望一个整数 ID 和一个数组作为其参数。我猜你需要将0 作为新用户的第一个参数传递,但我对 Laravel 不熟悉,所以我可能错了。
  • @Jeto 但我已经在规则函数中将 $id=0 作为默认值。问题是我无法将数组值与三元运算连接起来。它给了我一个错误:“数组到字符串的转换”。
  • 拥有$id=0 并不重要。函数期望的第一个参数仍然是 $id。听起来不粗鲁,但这是非常基本的东西。你应该阅读manual page on function arguments

标签: php arrays laravel validation ternary


【解决方案1】:

那是因为你只是传递一个数组,而方法接受两种不同类型的参数

$validator = Validator::make($request->all(), UserRequest::rules(0, $extend_rules)); // <-- you need to either pass 1 or 0 for the id and then $extended rules

// here is your method signature
public static function rules ($id=0, $merge=[]) {

【讨论】:

  • @SovanSamboNgeth 很高兴接受答案,因为问题仍然悬而未决会浪费其他人的时间来研究它。如果您是SO 的新手,只需点击中间的“0”即可。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多