From b4d03c47e69aabe39cf39157dfff19b536d38837 Mon Sep 17 00:00:00 2001 From: Ben-Piet O'Callaghan Date: Fri, 7 Jul 2017 14:22:42 +0100 Subject: [PATCH] Options to disable generate clug on create and update --- CHANGELOG.md | 3 +++ README.md | 2 +- src/HasSlug.php | 15 +++++++++++++++ src/SlugOptions.php | 32 +++++++++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8965e7..25f9b1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +## 1.1.0 - 2017-07-07 +- add `generateSlugOnCreate(false)` and `generateSlugOnUpdate(false)` + ## 1.0.0 - 2017-07-07 - Initial release diff --git a/README.md b/README.md index acfaa20..971a05d 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ You can use multiple fields as the source of the slug `generateSlugFrom(['firstn You can also pass a `callable` function to `generateSlugFrom()`. -Have a look [here for the options](https://github.com/bpocallaghan/sluggable/src/SlugOptions.php) and available config functions. +Have a look [here for the options](https://github.com/bpocallaghan/sluggable/blob/master/src/SlugOptions.php) and available config functions. ## Change log diff --git a/src/HasSlug.php b/src/HasSlug.php index 515a5b5..82f203d 100644 --- a/src/HasSlug.php +++ b/src/HasSlug.php @@ -38,6 +38,10 @@ protected function generateSlugOnCreate() { $this->slugOptions = $this->getSlugOptions(); + if (!$this->slugOptions->generateSlugOnCreate) { + return; + } + $this->createSlug(); } @@ -48,6 +52,10 @@ protected function generateSlugOnUpdate() { $this->slugOptions = $this->getSlugOptions(); + if (!$this->slugOptions->generateSlugOnUpdate) { + return; + } + // check updating $slugNew = $this->generateNonUniqueSlug(); $slugCurrent = $this->attributes[$this->slugOptions->slugField]; @@ -102,6 +110,13 @@ protected function generateNonUniqueSlug() */ protected function getSlugSourceString() { + // if callback given + if (is_callable($this->slugOptions->generateSlugFrom)) { + $slug = call_user_func($this->slugOptions->generateSlugFrom, $this); + + return $slug; + } + // concatenate on the fields and implode on seperator $slug = collect($this->slugOptions->generateSlugFrom) ->map(function ($fieldName = '') { diff --git a/src/SlugOptions.php b/src/SlugOptions.php index 236e369..fac4521 100644 --- a/src/SlugOptions.php +++ b/src/SlugOptions.php @@ -4,7 +4,7 @@ class SlugOptions { - /** @var string|array */ + /** @var string|array|callable */ public $generateSlugFrom = 'name'; /** @var string */ @@ -13,6 +13,12 @@ class SlugOptions /** @var bool */ public $generateUniqueSlug = true; + /** @var bool */ + public $generateSlugOnCreate = true; + + /** @var bool */ + public $generateSlugOnUpdate = true; + /** @var string */ public $slugSeparator = '-'; @@ -61,6 +67,30 @@ public function makeSlugUnique($unique = true) return $this; } + /** + * If we need to generate a slug on create + * @param bool $onCreate + * @return $this + */ + public function generateSlugOnCreate($onCreate = true) + { + $this->generateSlugOnCreate = $onCreate; + + return $this; + } + + /** + * If we need to generate a slug on update + * @param bool $onUpdate + * @return $this + */ + public function generateSlugOnUpdate($onUpdate = true) + { + $this->generateSlugOnUpdate = $onUpdate; + + return $this; + } + /** * Set the slug seperator * @param string $separator