mremi/url-shortener-bundle

用于Symfony2/Symfony3的UrlShortener库的实现

安装数量: 133,945

依赖关系: 0

建议者: 0

安全性: 0

星标: 19

关注者: 5

分支: 15

开放问题: 6

类型:symfony-bundle

v1.1.1 2016-05-29 17:23 UTC

This package is auto-updated.

Last update: 2024-08-26 23:35:07 UTC


README

SensioLabsInsight

Build Status Total Downloads Latest Stable Version Scrutinizer Code Quality Code Coverage

此扩展实现了用于Symfony的UrlShortener库。

许可证

此扩展可在MIT许可证下使用。

先决条件

此版本的扩展需要Symfony 2.8, 3.0或更高版本。

为了与Symfony 2.7或更早版本兼容,请使用此扩展的1.0.*版本。

基本文档

安装

安装是一个快速5步过程

  1. 使用composer下载MremiUrlShortenerBundle
  2. 启用扩展
  3. 创建您的链接类(可选)
  4. 配置MremiUrlShortenerBundle
  5. 更新您的数据库模式(可选)

步骤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类。

此扩展提供了一些基类,这些类已经为大多数字段进行了映射,以便更轻松地创建实体。以下是您如何使用它的示例:

  1. 从“Entity”文件夹扩展基Link
  2. 映射id字段。它必须是受保护的,因为它是从父类继承的
  3. 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);

自定义提供者

您可以将自己的提供者添加到链式提供者中

  1. 创建一个实现\Mremi\UrlShortener\Provider\UrlShortenerProviderInterface的服务
  2. 添加标签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请求的一些统计信息:每个提供者的请求数量、消耗的内存、请求持续时间...

Screenshot

贡献

有任何问题或反馈?请提交一个问题,我会尽快回复。

这里缺少一个功能吗?请随意创建一个拉取请求来解决这个问题!

希望这已经对您有所帮助,如果您觉得有用,请分享并推荐它! :)

@mremitsme