【问题标题】:With in Laravel and Validate double -> operator使用 Laravel 和 Validate double -> 运算符
【发布时间】:2015-02-06 20:10:07
【问题描述】:

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

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

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

另一个问题: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

但我知道不可能使用运算符“-”来表示一个类的多个方法/属性(即使它是一个库)。

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

【问题讨论】:

    标签: php oop laravel laravel-4 scope


    【解决方案1】:

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

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


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

    发生的情况是方法返回$this,因此您可以立即对同一对象调用下一个方法。

    让我们看另一个例子:

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

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

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

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

    【讨论】:

    • 不客气。如果您回答了您的问题,请不要忘记接受答案(通过单击旁边的复选标记):)
    • 需要 15 点声望才能选中复选标记
    • 不,那是为了投票。您可以接受具有 1 个声望的答案。 Here's how it works
    【解决方案2】:

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

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

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

    【讨论】:

    • 我不能使用对象 $object = new MyClass(); $object->myMethod()->myattribute;为什么验证有:$validator->required('您必须提供一个电子邮件地址。')->email('您必须提供一个有效的电子邮件地址')->validate('email', 'Email');
    • 那么,您是否认为只有将多个变量发送到视图的选项?我不这么认为,我已经看到用于其他选项
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2015-12-13
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多