Laravel 5.1可重复使用的弹头

时间:2015-08-09 09:52:21

标签: laravel-5 laravel-5.1

您好,我怎样才能在我的项目中重复使用独特的段塞逻辑。我有一种方法可以在我的产品模型中创建一个独特的slug,我想在我的其他模型中使用相同的逻辑:

/**
     * Set the name attribute and automatically the slug
     *
     * @param string $name
     */
    public function setNameAttribute($name)
    {
        $this->attributes['name'] = $name;

        if(! $this->exists)
        {
            $this->setUniqueSlug($name, '');
        }
    }

    /**
     * Recursive routine to set a unique slug
     *
     * @param string $name
     * @param mixed $extra
     */
    public function setUniqueSlug($name, $extra)
    {
        $slug = str_slug($name . '-' . $extra);

        if (static::whereSlug($slug)->exists())
        {
            $this->setUniqueSlug($name, $extra + 1);

            return;
        }

        $this->attributes['slug'] = $slug;
    }

2 个答案:

答案 0 :(得分:0)

有许多方法,您可以创建一个从eloquent扩展的Base模型类,然后从该基础模型扩展其余模型。创建方法" setUniqueSlug"在该基础模型中可以从任何其他模型访问。 或者你可以创建一个Helper类,这样你就可以调用" setUniqueSlug"从任何地方。

答案 1 :(得分:0)

Martin Beans评论是最好的解决方法。

Paul Vidal的方式没有任何问题,但是,我不会使用基本模型方法,除非你要在每个模型中使用它。

只要你没有为slug使用不同的字段名称并且你使用像父slug这样的东西(例如product / {slug})你应该能够将上面的代码直接放入一个特征然后use进入你想要的模型。

希望这有帮助!