aaguilar/url-shortener-bundle

UrlShortener 库的 Symfony2/Symfony3/Symfony4 实现

安装: 3

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 0

分支: 15

类型:symfony-bundle

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

This package is not auto-updated.

Last update: 2024-09-20 17:42:52 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. 启用 Bundle
  3. 创建你的 Link 类(可选)
  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:启用 Bundle

在内核中启用 Bundle

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Mremi\UrlShortenerBundle\MremiUrlShortenerBundle(),
    );
}

步骤 3:创建你的 Link 类(可选)

此包的目的是不将一些 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.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 请求的一些统计信息:每个提供者的请求数量、消耗的内存、请求持续时间...

Screenshot

贡献

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

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

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

@mremitsme