samj / doctrine-sluggable-bundle
Doctrine2实体sluggable行为的实现
Requires
- php: >=5.3.2
This package is auto-updated.
Last update: 2024-09-05 15:55:32 UTC
README
DoctrineSluggableBundle为您的实体提供了Doctrine2的sluggable行为的优雅实现。
- 为实体生成唯一slug的简单行为
- 通过实现接口实现得很好
- 确保slug不重复
- 支持iconv/transliterate,例如:é -> e
- 使用依赖注入,允许您实现自定义slugger
DoctrineSluggableBundle负责确保为您的实体生成的slug是唯一的。只需让您的实体实现SluggableInterface接口,您的实体将自动生成slug。
这使用了服务容器和依赖注入,这使得您能够轻松地创建自己的“Slugger”类。这支持您创建适合您领域问题的自定义slug。
本文档仍在建设中。然而,为任何感兴趣的人提供了一个示例,以开始对该包进行实验。
贡献者
- Sam Jarrett (samjarrett@me.com)
- Denis Chartier (denis.chart+git@gmail.com)
- Cameron Manderson (cameronmanderson@gmail.com)
安装
只需运行,假设您已安装composer.phar或composer二进制文件
$ php composer.phar require samj/doctrine-sluggable-bundle 2.0
然后在app/AppKernel.php中添加以下内容
new SamJ\DoctrineSluggableBundle\SamJDoctrineSluggableBundle(),
示例实体
示例 1
在此示例中,slug基于单个字段构建:注意:请确保实现getter方法getId和getTitle
代码
<?php
// --- YOUR NAMESPACE HERE ---
namespace SamJ\ExampleBundle\Entity;
use SamJ\DoctrineSluggableBundle\SluggableInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table
*/
class SingleFieldExample implements SluggableInterface {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $title;
/**
* @ORM\Column(type="string")
*/
protected $slug;
// Implement methods for $id, $title, etc
public function getSlug()
{
return $this->slug;
}
public function setSlug($slug)
{
if (!empty($this->slug)) return false;
$this->slug = $slug;
}
public function getSlugFields() {
return $this->getTitle();
}
}
结果
当实体持久化时,$slug字段将被填充,为0-9、a-z,空格被转换为连字符("-"),基于标题字段。
例如:标题为Test Post的实体将具有slug为test-post。
示例 2
在此示例中,slug基于多个单字段:注意:请确保实现getter方法getId、getTitle和getAuthor
代码
<?php
// --- YOUR NAMESPACE HERE ---
namespace SamJ\ExampleBundle\Entity;
use SamJ\DoctrineSluggableBundle\SluggableInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table
*/
class MultipleSingleFieldExample implements SluggableInterface {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $title;
/**
* @ORM\Column(type="string")
*/
protected $author;
/**
* @ORM\Column(type="string")
*/
protected $slug;
// Implement methods for $id, $title, $author, etc
public function getSlug()
{
return $this->slug;
}
public function setSlug($slug)
{
if (!empty($this->slug)) return false;
$this->slug = $slug;
}
public function getSlugFields() {
return array($this->getAuthor(), $this->getTitle());
}
}
结果
当实体持久化时,$slug字段将被填充,为0-9、a-z,空格被转换为连字符("-"),基于作者和标题字段。
例如:作者为Sam Jarrett和标题为Test Post的实体将具有slug为sam-jarrett-test-post。
其他说明
此bundle使用名为“Slugger”的服务。您可以通过实现SluggerInterface->getSlug($fields)方法来实施自己的slugger行为(例如处理特定字段排序等)。在service.xml中配置服务容器,指定“sluggable.slugger.class”参数中的类。