mremi / url-shortener-bundle
用于Symfony2/Symfony3的UrlShortener库的实现
Requires
- php: >=5.3.3
- mremi/url-shortener: ~1.0
- symfony/framework-bundle: ~2.8 | ~3.0
README
此扩展实现了用于Symfony的UrlShortener库。
许可证
此扩展可在MIT许可证下使用。
先决条件
此版本的扩展需要Symfony 2.8, 3.0或更高版本。
为了与Symfony 2.7或更早版本兼容,请使用此扩展的1.0.*版本。
基本文档
安装
安装是一个快速5步过程
- 使用composer下载MremiUrlShortenerBundle
- 启用扩展
- 创建您的链接类(可选)
- 配置MremiUrlShortenerBundle
- 更新您的数据库模式(可选)
步骤1:使用composer下载MremiUrlShortenerBundle
通过composer要求mremi/url-shortener-bundle
php composer.phar require mremi/url-shortener-bundle
注意:如果您正在使用Symfony 2.7或更早版本,请要求~1.0.0版本
php composer.phar require mremi/url-shortener-bundle:~1.0.0
Composer将修改您的composer.json文件并将扩展安装到项目的vendor/mremi
目录中。
步骤2:启用扩展
在内核中启用扩展
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Mremi\UrlShortenerBundle\MremiUrlShortenerBundle(), ); }
步骤3:创建您的链接类(可选)
此扩展的目标不是将某些Link
类持久化到数据库中,但如果您想这样做,只需遵循以下说明即可。因此,如果您不需要这样做,可以跳到下一步。
您的第一个任务是创建应用程序的Link
类。此类可以看起来和表现您想要的任何方式:添加任何有用的属性或方法。这是您的 Link
类。
此扩展提供了一些基类,这些类已经为大多数字段进行了映射,以便更轻松地创建实体。以下是您如何使用它的示例:
- 从“Entity”文件夹扩展基
Link
类 - 映射
id
字段。它必须是受保护的,因为它是从父类继承的 - 在
long_url
列上添加索引:Doctrine不允许在映射中指定索引大小,因此您必须手动在迁移类中编写它。
注意
目前,此扩展只处理Doctrine ORM(任何PR都将受到赞赏 :) )。
<?php // src/Acme/UrlShortenerBundle/Entity/Link.php namespace Acme\UrlShortenerBundle\Entity; use Mremi\UrlShortenerBundle\Entity\Link as BaseLink; class Link extends BaseLink { /** * @var integer */ protected $id; }
<!-- src/Acme/UrlShortenerBundle/Resources/config/doctrine/Link.orm.xml --> <?xml version="1.0" encoding="UTF-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name="Acme\UrlShortenerBundle\Entity\Link" table="link"> <id name="id" column="id" type="integer"> <generator strategy="AUTO" /> </id> </entity> </doctrine-mapping>
<?php // app/DoctrineMigrations/VersionYYYYMMDDHHIISS.php namespace Application\Migrations; use Doctrine\DBAL\Migrations\AbstractMigration, Doctrine\DBAL\Schema\Schema; class VersionYYYYMMDDHHIISS extends AbstractMigration { public function up(Schema $schema) { // customize index size as you want... $this->addSql("CREATE INDEX idx_url_shortener_link_long_url ON link (long_url(20))"); } public function down(Schema $schema) { $this->addSql("DROP INDEX idx_url_shortener_link_long_url ON link;"); }
步骤4:配置MremiUrlShortenerBundle
目前,您只需要配置您的Bit.ly用户名和密码。
# app/config/config.yml mremi_url_shortener: link_class: Mremi\UrlShortener\Model\Link providers: bitly: enabled: true username: your_bitly_username password: your_bitly_password options: connect_timeout: 1 timeout: 1 google: enabled: true api_key: your_api_key options: connect_timeout: 1 timeout: 1
步骤5:更新您的数据库模式(可选)
如果您已配置数据存储(步骤3),现在您可以更新数据库模式。
如果您想首先查看创建表的查询
$ app/console doctrine:schema:update --dump-sql
然后您可以运行它
$ app/console doctrine:schema:update --force
链式提供者
一个服务允许您缩短/扩展URL,如下所示
<?php $linkManager = $container->get('mremi_url_shortener.link_manager'); $chainProvider = $container->get('mremi_url_shortener.chain_provider'); $link = $linkManager->create(); $link->setLongUrl('http://www.google.com'); $chainProvider->getProvider('bitly')->shorten($link); $chainProvider->getProvider('google')->expand($link);
自定义提供者
您可以将自己的提供者添加到链式提供者中
- 创建一个实现
\Mremi\UrlShortener\Provider\UrlShortenerProviderInterface
的服务 - 添加标签
mremi_url_shortener.provider
<?xml version="1.0" ?> <container xmlns="https://symfony.ac.cn/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://symfony.ac.cn/schema/dic/services https://symfony.ac.cn/schema/dic/services/services-1.0.xsd"> <services> <service id="acme.custom_provider" class="Acme\YourBundle\Provider\CustomProvider"> <tag name="mremi_url_shortener.provider" /> </service> </services> </container>
测试配置的提供者
现在,您可以使用以下命令行测试您配置的提供者
$ app/console mremi:url-shortener:test
检索链接
您可以使用以下查找器检索一些链接
<?php $linkManager = $container->get('mremi_url_shortener.link_manager'); $shortened = $linkManager->findOneByProviderAndShortUrl('bitly', 'http://bit.ly/ze6poY'); $expanded = $linkManager->findOneByProviderAndLongUrl('google', 'http://www.google.com');
如果您已配置数据存储(步骤3和5),查找器首先在数据库中查找;如果链接存在,则返回它;否则,将执行API调用并将链接保存。
否则这将消耗一个API调用。
Twig函数
您还可以从twig文件中简单缩短/扩展一个URL。如果未配置数据存储,请谨慎使用,因为它不友好。
{# src/Acme/YourBundle/Resources/views/index.html.twig #}
{{ mremi_url_shorten('bitly', 'http://www.google.com') }}
{{ mremi_url_expand('google', 'http://goo.gl/fbsS') }}
分析器
如果您的处于调试模式(请参阅您的前端控制器),您可以在网络调试工具栏中检查配置的提供者和当前HTTP请求的一些统计信息:每个提供者的请求数量、消耗的内存、请求持续时间...
贡献
有任何问题或反馈?请提交一个问题,我会尽快回复。
这里缺少一个功能吗?请随意创建一个拉取请求来解决这个问题!
希望这已经对您有所帮助,如果您觉得有用,请分享并推荐它! :)