Skip to content

Latest commit

 

History

History
127 lines (90 loc) · 2.75 KB

Slugifiable.md

File metadata and controls

127 lines (90 loc) · 2.75 KB

Slugifiable

Le trait permet d'utiliser des urls de type {slug}-{id} (pour le moment ;))

Configuration minimum

⚠️ ATTENTION : Une méthode getUrlAttribute() permettra de générer l'url d'un objet slugifiable, veuillez ne pas la surcharger.

Model

ℹ️ Pour utiliser le trait par défaut, le model doit posséder les attributs id et slug. Voir la Configuration Simple ou la Configuration Avancée pour modifier ce comportement

use Webup\LaravelTools\Traits\Slugifiable;

class MyModelName
{
    use Slugifiable;

    /**
     * Get the route name for url generation.
     *
     * @return string
     */
    public function getSlugifiableRouteName()
    {
        return "my.route.name";
    }
}

Router

Route::get('/{slugifiable}', 'MyController@myMethod')->name('my.route.name');

Controller

⚠️ ATTENTION : Le nom du paramètre doit être identique au nom dans le router (ici $slugifiable)

    public function myMethod(MyModelName $slugifiable)
    {
        // Have fun !
    }

Configuration simple

L'identifiant utilisé dans l'url est $model->getKeyName() (id par défaut) et permet de récupérer l'objet dans la DB.

Pour modifier ce comportement, ajouter au model :

    /**
     * Get the column name for the "id" part of url.
     *
     * @return string
     */
    public function getSlugifiableIdName()
    {
        return "uuid";
    }

De la même façon, la partie slug de l'url permet de générer le lien et les redirections.

Pour modifier ce comportement, ajouter au model :

    /**
     * Get the column name for the "slug" part of url.
     *
     * @return string
     */
    public function getSlugifiableSlugName()
    {
        return "ref";
    }

Configuration avancée

Il est possible de modifier la query utilisée pour récupérer le model slugifiable.

    /**
     * Base query used for retreving slugifiable object from DB.
     *
     * @return string
     */
    public function getSlugifiableModelQuery()
    {
        return $this->with([
                        "translations",
                        "images"
                    ])
                    ->where("published", 1);
    }

⚠️ ATTENTION : si la partie slug de l'url se trouve dans une relation du model slugifiable, il sera nécessaire d'ajouter la méthode suivante au model:

    /**
     * Get the object value to fill "slug" part of url.
     *
     * @return string
     */
    public function getSlugifiableSlugValue()
    {
        return $this->translations->first()->slug;
    }