PHP DevPHP实战PHP经验分享

ShortUrlService 短链接实现思路

2016-12-19  本文已影响145人  michael_jia

本文分析一下 ShortUrlService 的实现思路,结合 Yii 2.0 的 Service Locator 看一下如何配置使用;

代码示意
shorturl/
├── composer.json
├── controllers/
│   └── ShortUrlController.php
├── models/
│   └── ShortUrlModel.php
├── Module.php
├── README.md
└── service/
    ├── IShortUrl.php
    ├── Redis.php
    └── ShortUrlService.php
接口 IShortUrl
interface IShortUrl{
    public function getUrl($shortTag);
    public function getShortTag($url);
}
ShortUrlService 实现接口 IShortUrl
class ShortUrlService extends \yii\base\Component implements IShortUrl{
    ...
}
依赖 Redis
interface IRedis{
    public function get($key);
    public function set($key, $value);
}
class Redis extends \yii\base\Component implements IRedis {
    ...
}
依赖 ShortUrlModel
class ShortUrlModel extends  ActiveRecord {
    public static function getDb(){
        ...
    }
    ...
}

如何配置使用?

单元测试
phpunit.xml
tests/
候选方法
组装 url 的匿名函数及其调用
 44   'f' => function($target_url, $demand_id) {
 45       eval("\$target_url = \"{$target_url}\";");
 46       $target_url = urlencode($target_url);
 47       return function($user_id) use ($target_url) {
 48           $token = get_sms_token($user_id);
 49           $long_url = 'http://m.example.com/index.php?r=site/xyz&user_id={$user_id}&token={$token}&target_url={$target_url}'; // 中转地址,
 50           eval("\$long_url=\"{$long_url}\";");
 51           return $long_url;
 52       };
 53   }
上一篇下一篇

猜你喜欢

热点阅读