aaguilar / url-shortener-bundle
UrlShortener 库的 Symfony2/Symfony3/Symfony4 实现
Requires
- php: >=5.3.3
- mremi/url-shortener: ~1.0
- symfony/framework-bundle: ~2.8 | ~3.0
This package is not auto-updated.
Last update: 2024-09-20 17:42:52 UTC
README
此包实现了 Symfony 的 UrlShortener 库。
许可证
此包采用 MIT 许可证。
先决条件
此版本的包需要 Symfony 2.8, 3.0 或更高版本。
为了与 Symfony 2.7 或更早版本兼容,请使用此包的 1.0.* 版本。
基本文档
安装
安装是一个快速 5 步过程
- 使用 composer 下载 MremiUrlShortenerBundle
- 启用 Bundle
- 创建你的 Link 类(可选)
- 配置 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:启用 Bundle
在内核中启用 Bundle
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Mremi\UrlShortenerBundle\MremiUrlShortenerBundle(), ); }
步骤 3:创建你的 Link 类(可选)
此包的目的是不将一些 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.com.cn/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://symfony.com.cn/schema/dic/services https://symfony.com.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。如果没有配置数据存储,应谨慎使用,因为它对 HTTP 不友好。
{# 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 请求的一些统计信息:每个提供者的请求数量、消耗的内存、请求持续时间...
贡献
有任何问题或反馈?请提交一个 issue,我会尽快回复。
这里缺少一个功能吗?请随意创建一个 pull request 来解决这个问题!
希望这已经对您有所帮助,如果您觉得有用,请分享和推荐! :)