Server : Apache System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64 User : tradze ( 1001) PHP Version : 8.1.34 Disable Function : NONE Directory : /home/tradze/public_html/vendor/cviebrock/eloquent-sluggable/src/ |
<?php namespace Cviebrock\EloquentSluggable;
use Cviebrock\EloquentSluggable\Services\SlugService;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Eloquent\Model;
/**
* Class SluggableObserver
*
* @package Cviebrock\EloquentSluggable
*/
class SluggableObserver
{
/** @var string */
public const SAVING = 'saving';
/** @var string */
public const SAVED = 'saved';
/**
* @var \Cviebrock\EloquentSluggable\Services\SlugService
*/
private $slugService;
/**
* @var \Illuminate\Contracts\Events\Dispatcher
*/
private $events;
/**
* SluggableObserver constructor.
*
* @param \Cviebrock\EloquentSluggable\Services\SlugService $slugService
* @param \Illuminate\Contracts\Events\Dispatcher $events
*/
public function __construct(SlugService $slugService, Dispatcher $events)
{
$this->slugService = $slugService;
$this->events = $events;
}
/**
* @param \Illuminate\Database\Eloquent\Model $model
* @return bool|void
*/
public function saving(Model $model)
{
if ($model->sluggableEvent() !== self::SAVING) {
return;
}
$this->generateSlug($model, 'saving');
}
/**
* @param \Illuminate\Database\Eloquent\Model $model
* @return bool|void
*/
public function saved(Model $model)
{
if ($model->sluggableEvent() !== self::SAVED) {
return;
}
if ($this->generateSlug($model, 'saved')) {
return $model->saveQuietly();
}
}
/**
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $event
* @return bool
*/
protected function generateSlug(Model $model, string $event): bool
{
// If the "slugging" event returns false, abort
if ($this->fireSluggingEvent($model, $event) === false) {
return false;
}
$wasSlugged = $this->slugService->slug($model);
$this->fireSluggedEvent($model, $wasSlugged);
return $wasSlugged;
}
/**
* Fire the namespaced validating event.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $event
* @return bool|null
*/
protected function fireSluggingEvent(Model $model, string $event): ?bool
{
return $this->events->until('eloquent.slugging: ' . get_class($model), [$model, $event]);
}
/**
* Fire the namespaced post-validation event.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $status
* @return void
*/
protected function fireSluggedEvent(Model $model, string $status): void
{
$this->events->dispatch('eloquent.slugged: ' . get_class($model), [$model, $status]);
}
}