【问题标题】:How to pass (access) ID inside rules method in Laravel 5?如何在 Laravel 5 的规则方法中传递(访问)ID?
【发布时间】:2015-07-13 14:31:20
【问题描述】:

我正在使用表单模型绑定将用户数据填充到我的表单中。

{!! Form::model($user, ['route' => ['user_update', $user->id]]) !!}

完美运行。当我点击“提交”时,我输入了我的 UpdateUserRequest,在那里我根据一些规则验证我的输入。在这种情况下,我想保留唯一的电子邮件地址,但当然我们需要为“this”行“跳过唯一性”。

我有一个规则

'email' => 'required|unique:users,email,' . 123456,

当我临时硬编码这个 ID(用户表中的主键)时,它也能很好地工作。

如何在规则方法中访问此 ID? (特别是当我从控制器传递 $user_id 时)。

  1. 是的,Auth::user()->id 有效,但显然只适合我。我还处理其他用户的个人资料。
  2. 我可以将此用户的 ID 作为输入隐藏传递,并从请求/输入中访问它,但我认为这不是一个好的解决方案,对吗?
  3. 与 url 段相同。我可能可以从 url 中获取它,但也许有更好的方法?

我在 rules() 方法中,我是 dd() 一堆东西,但没有什么能像我预期的那样工作。

感谢您的任何提示! :)

【问题讨论】:

  • 我不明白您要达到的目的:更新用户个人资料时是否要跳过“唯一性”?
  • @DamienPirsy,完全正确。想象一下,我正在以超级管理员的身份更新某人的个人资料。例如,我正在更改 John Doe 的用户名,但我保留了他的电子邮件。然后我提交所有内容,Laravel 执行验证。 Laravel 抓取输入电子邮件并将其与数据库中现有的电子邮件进行比较,这在这种情况下没有意义,因为我不想触及这个字段。如果我离开“必需|唯一”但我将删除“用户、电子邮件、THIS_USERS_ID”,我将永远无法提交表单,原因很明显。希望现在清楚了。
  • 由于用户 ID 作为路由 url 的一部分传递,因此使用它是有意义的。这就是为什么它首先被传递的原因,因为您需要它来识别您正在使用的确切条目(无论是用于更新、验证还是您能找到的任何用途)。

标签: php laravel laravel-5 model-binding


【解决方案1】:

您可以通过route()->parameter() 的名称检索路由参数:

$userId = $this->route()->parameter('userId'); // or whatever the name of the parameter is

或捷径:

$userId = $this->route('userId');

【讨论】:

    【解决方案2】:

    好的,解决方法非常简单。

    $this->user->id
    

    完整规则如下:

    'email' => 'required|unique:users,email,' . $this->user->id,
    

    像魅力一样工作!

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多