68publishers/doctrine-sluggable

v0.5.1 2023-01-06 00:15 UTC

This package is auto-updated.

Last update: 2024-09-06 03:59:26 UTC


README

⚠️ 警告!此包没有活跃的支持,它仅存在于作者的历史需求。

Doctrine Sluggable

🔤 Doctrine Sluggable 扩展!

简单使用和集成到 Nette 框架

安装

安装 68publishers/doctrine-sluggable 的最佳方式是使用 Composer

$ composer require 68publishers/doctrine-sluggable

然后像这样将 SluggableEventSubscriber 注册到 EventManager

<?php

/** @var Doctrine\ORM\EntityManager $em */
/** @var Doctrine\Common\Annotations\Reader $reader */

$subscriber = new SixtyEightPublishers\DoctrineSluggable\SluggableEventSubscriber(
	new SixtyEightPublishers\DoctrineSluggable\DefinitionStorage\AnnotationSluggableDefinitionStorage($reader)
);

$em->getEventManager()->addEventSubscriber($subscriber);

但是,如果你使用 Nette 框架,最好使用编译器扩展

extensions:
    sluggable: SixtyEightPublishers\DoctrineSluggable\Bridge\Nette\SluggableExtension

使用方法

示例实体

<?php

use Doctrine\ORM\Mapping as ORM;
use SixtyEightPublishers\DoctrineSluggable\Annotation as Sluggable;

/**
 * @ORM\Entity
 */
class Product {
	/**
	 * @ORM\Column(type="string", length=255)
	 *
	 * @var string
	 */
	private $name;

	/**
	 * @ORM\ManyToOne(targetEntity="Category")
	 *
	 * @var Category
	 */
	private $category;

	/**
	 * @Sluggable\Slug(
	 *      strategy="SixtyEightPublishers\DoctrineSluggable\Strategy\GenerateOnInsertStrategy",
	 *      strategyOptions={
	 *            "fields": {"name"}, 
	 *            "checkOnUpdate": true
	 *      },
	 *      finder="SixtyEightPublishers\DoctrineSluggable\Finder\FieldBasedSimilarSlugFinder",
	 *      finderOptions={
	 *            "field": "category", 
	 *            "type": "outer"
	 *      },
	 *      transliterator="SixtyEightPublishers\DoctrineSluggable\Transliterator\CamelCaseTransliterator"
	 * )
	 * @ORM\Column(type="string", length=255)
	 *
	 * @var string
	 */
	private $slug;

	/**
	 * @return string
	 */
	public function getSlug() : string
	{
		# slug is generated on EntityManager's onFlush event
		if (NULL === $this->slug) {
			throw new RuntimeException('Slug is not set.');
		}

		return $this->slug;
	}
}

选项

@todo

贡献

在提交任何更改之前,不要忘记运行

$ vendor/bin/php-cs-fixer fix --config=.php_cs.dist -v --dry-run

$ vendor/bin/tester ./tests