Laravel 5.1 可重复使用的弹头

Laravel 5.1 Reusable Slug

你好,我怎样才能使独特的 slug 逻辑在我的项目中可重用。我有一种在我的产品模型中创建一个独特的 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;
    }

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

Martin Beans 的评论将是解决此问题的最佳方式。

Paul Vidal 的方法没有任何问题,但是,我不会使用基本模型方法,除非您打算将它用于每个模型。

只要您没有为 slug 使用不同的字段名称,而是使用类似父 slug 的东西(即 product/{slug}),您应该能够将上述代码直接放入特征中然后 use 输入您想要的模型。

希望对您有所帮助!