@@ 190-218 (lines=29) @@ | ||
187 | * @return string |
|
188 | * @throws \UnexpectedValueException |
|
189 | */ |
|
190 | protected function generateSlug(string $source, array $config, string $attribute): string |
|
191 | { |
|
192 | $separator = $config['separator']; |
|
193 | $method = $config['method']; |
|
194 | $maxLength = $config['maxLength']; |
|
195 | $maxLengthKeepWords = $config['maxLengthKeepWords']; |
|
196 | ||
197 | if ($method === null) { |
|
198 | $slugEngine = $this->getSlugEngine($attribute); |
|
199 | $slug = $slugEngine->slugify($source, $separator); |
|
200 | } elseif (is_callable($method)) { |
|
201 | $slug = call_user_func($method, $source, $separator); |
|
202 | } else { |
|
203 | throw new \UnexpectedValueException('Sluggable "method" for ' . get_class($this->model) . ':' . $attribute . ' is not callable nor null.'); |
|
204 | } |
|
205 | ||
206 | $len = mb_strlen($slug); |
|
207 | if (is_string($slug) && $maxLength && $len > $maxLength) { |
|
208 | $reverseOffset = $maxLength - $len; |
|
209 | $lastSeparatorPos = mb_strrpos($slug, $separator, $reverseOffset); |
|
210 | if ($maxLengthKeepWords && $lastSeparatorPos !== false) { |
|
211 | $slug = mb_substr($slug, 0, $lastSeparatorPos); |
|
212 | } else { |
|
213 | $slug = trim(mb_substr($slug, 0, $maxLength), $separator); |
|
214 | } |
|
215 | } |
|
216 | ||
217 | return $slug; |
|
218 | } |
|
219 | ||
220 | /** |
|
221 | * Return a class that has a `slugify()` method, used to convert |
@@ 176-204 (lines=29) @@ | ||
173 | * @return string |
|
174 | * @throws \UnexpectedValueException |
|
175 | */ |
|
176 | protected function generateSlug(string $source, array $config, string $attribute): string |
|
177 | { |
|
178 | $separator = $config['separator']; |
|
179 | $method = $config['method']; |
|
180 | $maxLength = $config['maxLength']; |
|
181 | $maxLengthKeepWords = $config['maxLengthKeepWords']; |
|
182 | ||
183 | if ($method === null) { |
|
184 | $slugEngine = $this->getSlugEngine($attribute); |
|
185 | $slug = $slugEngine->slugify($source, $separator); |
|
186 | } elseif (is_callable($method)) { |
|
187 | $slug = call_user_func($method, $source, $separator); |
|
188 | } else { |
|
189 | throw new \UnexpectedValueException('Sluggable "method" for ' . get_class($this->model) . ':' . $attribute . ' is not callable nor null.'); |
|
190 | } |
|
191 | ||
192 | $len = mb_strlen($slug); |
|
193 | if (is_string($slug) && $maxLength && $len > $maxLength) { |
|
194 | $reverseOffset = $maxLength - $len; |
|
195 | $lastSeparatorPos = mb_strrpos($slug, $separator, $reverseOffset); |
|
196 | if ($maxLengthKeepWords && $lastSeparatorPos !== false) { |
|
197 | $slug = mb_substr($slug, 0, $lastSeparatorPos); |
|
198 | } else { |
|
199 | $slug = trim(mb_substr($slug, 0, $maxLength), $separator); |
|
200 | } |
|
201 | } |
|
202 | ||
203 | return $slug; |
|
204 | } |
|
205 | ||
206 | /** |
|
207 | * Return a class that has a `slugify()` method, used to convert |