使用 in Laravel 和 Validate double -> 运算符

With in Laravel and Validate double -> operator

我是 OOP 和 Laravel 的新手,但我注意到带有 in laravel 的运算符用于很多事情:例如,我发现这部分代码在文档:

return Redirect::to('register')->withErrors($validator);

有错误?我知道 with 用于将多个元素传递给视图:关于此运算符,我还需要了解更多信息吗?

另一个问题:php 中的验证 class 具有这种类型的运算符:

 $validator->required('You must supply an email address.')->email('You must supply a valid email address')->validate('email', 'Email');

为什么我可以对 class 验证器的一个实例使用多个“->”?我是这样知道的:

$object = new object();

$object->something(); //metod or attribute

但我知道不可能使用运算符“-”来表示多个 method/attribute 用于 class(即使它是一个库)。

谢谢大家,我很抱歉,也许,愚蠢的问题!谢谢!

你好像明白with()的目的就好了。

关于你的第二个问题,你可以 "chain" 对象方法,如果方法每个 return 对象是这样的:

<?php
class MyClass {
    public function myMethod()
    {
        // do stuff
        return $this;
    }

好吧 Redirect::to() return 是 Illuminate\Http\RedirectResponse 的一个实例。这个 class 有一个方法 withErrors 在示例中被调用。

然而,这个 with* 方法与将数据传递到视图的方法有点不同。 withErrors 将数据闪烁 到会话,以便下一个请求可用(重定向发生后)


关于你的第二个问题,这个:$validator->required()->email() 被称为 方法链接 。它被大量使用(不仅在 Laravel 中)以实现简洁的语法。

发生的事情是方法 return $this 因此您可以立即在同一对象上调用下一个方法。

再看一个例子:

$result = User::where('active', true)->where('name', 'like', 'a%')->get();

如果我们现在看一下 Illuminate\Database\Eloquent\Builder 中的 where() 方法,您可以看到在 where 逻辑发生之后它 returns $this 所以我们可以继续调用方法。

public function where($column, $operator = null, $value = null, $boolean = 'and')
{
    // code omitted for brevity

    return $this;
}

许多 Laravel classes 实现了这个所谓的 Fluent Interface,它允许对几乎每个函数调用进行方法链接。只有具有明显 return 值的方法不能链接。就像使用 get() 检索结果一样。当然它必须 return 结果,它也不能 return $this