在Laravel和Validate中加倍 - >操作者

时间:2015-02-06 20:10:07

标签: php oop laravel laravel-4 scope

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

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

withErrors?我知道用于将多个元素传递给视图:我需要了解更多有关此运算符的内容吗?

另一个问题:php中的validate类有这种类型的运算符:

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

为什么我可以使用多个" - >"对于类验证器的实例?我知道这样:

$object = new object();

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

但我知道不可能使用运营商" - "用于表示类的多个方法/属性(即使它是库)。

谢谢大家,对不起,也许是愚蠢的问题!谢谢!

2 个答案:

答案 0 :(得分:0)

您似乎理解with()的目的就好了。

至于你的第二个问题,你可以“链接”对象方法,如果每个方法都返回这样的对象:

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

答案 1 :(得分:0)

Redirect::to()会返回Illuminate\Http\RedirectResponse的实例。该类有一个方法withErrors,在示例中调用。

但是,此with*方法与将数据传递给视图的方法略有不同。 withErrors 将数据闪烁到会话,以便下次请求可用(重定向发生后)


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

这些方法会返回$this,因此您可以立即在同一个对象上调用下一个方法。

让我们看另一个例子:

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

如果我们现在看一下where()中的Illuminate\Database\Eloquent\Builder方法,你可以看到在逻辑发生的地方之后它返回$this,这样我们就可以继续调用方法了。

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

    return $this;
}

许多Laravel类实现了这个所谓的 Fluent Interface ,它允许几乎每个函数调用的方法链接。只有具有明显返回值的方法才能被链接。比如使用get()检索结果。当然,它必须返回结果,它也不能返回$this