1. Go to this page and download the library: Download tobento/app-slugging library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tobento / app-slugging example snippets
use Tobento\App\AppFactory;
use Tobento\App\Slugging\SlugRepositoryInterface;
use Tobento\Service\Slugifier\SlugifierFactoryInterface;
use Tobento\Service\Slugifier\SlugifierInterface;
use Tobento\Service\Slugifier\SlugifiersInterface;
use Tobento\Service\Slugifier\SlugsInterface;
// Create the app
$app = (new AppFactory())->createApp();
// Add directories:
$app->dirs()
->dir(realpath(__DIR__.'/../'), 'root')
->dir(realpath(__DIR__.'/../app/'), 'app')
->dir($app->dir('app').'config', 'config', group: 'config')
->dir($app->dir('root').'public', 'public')
->dir($app->dir('root').'vendor', 'vendor');
// Adding boots
$app->boot(\Tobento\App\Slugging\Boot\Slugging::class);
$app->booting();
// Implemented interfaces:
$slugifierFactory = $app->get(SlugifierFactoryInterface::class);
$slugifier = $app->get(SlugifierInterface::class);
$slugifiers = $app->get(SlugifiersInterface::class);
$slugs = $app->get(SlugsInterface::class);
$slugRepository = $app->get(SlugRepositoryInterface::class);
// Run the app
$app->run();
use Tobento\Service\Slugifier\SlugifierInterface;
use Tobento\Service\Slugifier\SlugifiersInterface;
class SomeService
{
public function __construct(
protected SlugifierInterface $slugifier,
protected SlugifiersInterface $slugifiers,
) {}
private function slugify()
{
// using the default slugifier:
$slug = $this->slugifier->slugify(string: 'Lorem Ipsum!', locale: 'de');
// using a custom slugifier:
$slug = $this->slugifiers->get('custom')->slugify('Lorem Ipsum!');
}
}
use Tobento\Service\Slugifier\Resource\ArrayResource;
use Tobento\Service\Slugifier\SlugsInterface;
// Adding slugs resources only if requested:
$app->on(SlugsInterface::class, static function(SlugsInterface $slugs): void {
$slugs->addResource(new ArrayResource(
slugs: ['login'],
));
});
use Tobento\App\Slugging\Resource\RepositoryResource;
use Tobento\Service\Repository\RepositoryInterface;
use Tobento\Service\Slugifier\SlugsInterface;
// Adding slugs resources only if requested:
$app->on(SlugsInterface::class, static function(SlugsInterface $slugs, BlogRepositoryInterface $blogRepo): void {
$slugs->addResource(new RepositoryResource(
repository: $blogRepo,
priority: 100, // higher priority will be first.
resourceKey: 'blog', // or null
// or using a closure:
resourceKey: static function (null|object $blog): null|string {
return $blog->resourceKey();
},
resourceId: static function (object $blog): null|string|int {
return $blog->id();
},
// or null if none:
resourceId: null,
// you may customize the where query parameters:
whereParameters: static function (string $slug, string $locale): array {
return $locale === ''
? ['slug' => $slug] // locale independent (default)
: ['slug' => $slug, 'locale' => $locale]; // locale dependent
// JSON SYNTAX:
return ['slug->'.$locale => $slug]; // locale dependent
},
));
});
use Tobento\App\AppFactory;
// Create the app
$app = (new AppFactory())->createApp();
// Adding boots
$app->boot(\Tobento\App\Validation\Boot\Validator::class);
$app->boot(\Tobento\App\Slugging\Boot\Slugging::class);
// Run the app
$app->run();
use Tobento\App\Slugging\Validation\UniqueSlugRule;
$validation = $validator->validate(
data: [
'slug' => 'login',
'slug.de' => 'anmelden',
'slug.en' => 'login',
],
rules: [
'slug' => [
new UniqueSlugRule(
locale: 'en',
// you may specify a custom error message:
errorMessage: 'Custom error message',
),
],
'slug.de' => [
new UniqueSlugRule(), // locale is automatically determined as 'de'.
],
'slug.en' => [
new UniqueSlugRule(), // locale is automatically determined as 'en'.
],
]
);
use Tobento\App\Slugging\Validation\UniqueSlugRule;
$validation = $validator->validate(
data: [
'slug.en' => 'login',
],
rules: [
'slug.en' => [
// skips validation:
new UniqueSlugRule(skipValidation: true),
// does not skip validation:
new UniqueSlugRule(skipValidation: false),
// skips validation:
new UniqueSlugRule(skipValidation: fn (mixed $value): bool => $value === 'foo'),
],
]
);
app/config/slugging.php
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.