Slugging for CakePHP 3.x
- CakePHP 3.0+
Using Composer:
composer require muffin/slug:~1.0
To make your application load the plugin either run:
./bin/cake plugin load Muffin/Slug
or add the following line to config/bootstrap.php
:
Plugin::load('Muffin/Slug');
To enable slugging add the behavior to your table classes in the
initialize()
method.
public function initialize(array $config)
{
//etc
$this->addBehavior('Muffin/Slug.Slug', [
// Optionally define your custom options here (see Configuration)
]);
}
Please note that Slug expects a database column named
slug
to function. If you prefer to use another column make sure to specify thefield
configuration option.
If you want to find a record using it's slug, a custom finder is provided by the plugin.
// src/Controller/ExamplesController.php
$example = $this->Examples->find('slugged', ['slug' => $slug]);
Slug comes with the following configuration options:
field
: name of the field (column) to hold the slug. Defaults toslug
.displayField
: name of the field(s) to build the slug from. Defaults to the\Cake\ORM\Table::displayField()
.separator
: defaults to-
.replacements
: hash of characters (or strings) to custom replace before generating the slug.maxLength
: maximum length of a slug. Defaults to the field's limit as defined in the schema (when possible). Otherwise, no limit.slugger
: class that implements theMuffin\Slug\SlugInterface
. Defaults toMuffin\Slug\Slugger\CakeSlugger
.unique:
: tells if slugs should be unique. Set this to a callable if you want to customize how unique slugs are generated. Defaults totrue
.scope
: extra conditions used when checking a slug for uniqueness.implementedEvents
: events this behavior listens to.implementedFinders
: custom finders implemented by this behavior.implementedMethods
: mixin methods directly accessible from the table.onUpdate
: Boolean indicating whether slug should be updated when updating record, defaults tofalse
.
- Fork
- Mod, fix
- Test - this is important, so it's not unintentionally broken
- Commit - do not mess with license, todo, version, etc. (if you do change any, bump them into commits of their own that I can ignore when I pull)
- Pull request - bonus point for topic branches
To ensure your PRs are considered for upstream, you MUST follow the CakePHP coding standards. A pre-commit
hook has been included to automatically run the code sniffs for you:
ln -s ../../contrib/pre-commit .git/hooks/.
http://github.com/usemuffin/slug/issues
This was originally inspired by @dereuromark's SluggedBehavior
.
Copyright (c) 2015, Use Muffin and licensed under The MIT License.