A Laravel URL Shortener package that provides URL redirects with optional protected url passwords, url expirations, open limits before expiration, ability to set feature activation dates and click tracking out of the box for your Laravel applications.
install the package via composer:
composer require yorcreative/laravel-urlshortener
Publish the packages assets.
php artisan vendor:publish --provider="YorCreative\UrlShortener\UrlShortenerServiceProvider"
Run migrations.
php artisan migrate
Building Short Urls
/**
* Basic
*/
$url = UrlService::shorten('something-extremely-long.com/even/longer?ref=with&some=thingelselonger')
->build();
// http(s)://host/prefix/identifier;
/**
* Advanced
*/
$url = UrlService::shorten('something-extremely-long.com/even/longer?ref=with&some=thingelselonger')
->withActivation(Carbon::now()->addHour()->timestamp)
->withExpiration(Carbon::now()->addDay()->timestamp)
->withOpenLimit(2)
->withOwnership(Model::find(1))
->withPassword('password')
->build();
// http(s)://host/prefix/identifier;
Finding Existing Short Urls
/**
* Find a Short URL by its identifier
*/
$shortUrl = UrlService::findByIdentifier('identifier');
/**
* Find a Short URL by its hashed signature
*/
$shortUrl = UrlService::findByHash(md5('long_url'));
/**
* Find a Short URL by its plain text long url string
*/
$shortUrl = UrlService::findByPlainText('long_url');
/**
* Will return an instance of Models/ShortUrl or throw UrlRepository('Unable to locate Short URL')
*/
Getting Click Information
$clicks = ClickService::get()->toArray();
dd($clicks);
[
'results' => [
[
'id' => ...,
'created_at' => ...,
'short_url' => [
'id' => ...,
'identifier' => ...,
'hashed' => ...,
'plain_text' => ...,
'limit' => ...,
'created_at' => ...,
'updated_at' =>> ...
],
'location' => [
'id' => ...,
'ip' => ...,
'countryName' => ...,
'countryCode' => ...,
'regionCode' => ...,
'regionName' => ...,
'cityName' => ...,
'zipCode' => ...,
'isoCode' => ...,
'postalCode' => ...,
'latitude' => ...,
'longitude' => ...,
'metroCode' => ...,
'areaCode' => ...,
'timezone' => ...,
'created_at' => ...,
'updated_at' => ...
],
'outcome' => [
'id' => ...,
'name' => ...,
'alias' => ...,
]
]
],
'total' => 1
];
Getting Click Information and Filtering on Ownership
$clicks = ClickService::get([
'ownership' => [
Model::find(1),
Model::find(2)
]
]);
Filter on Outcome
$clicks = ClickService::get([
'outcome' => [
1, // successful_routed
2, // successful_protected
3, // failure_password
4, // failure_expiration
5 // failure_limit
]
]);
Filter on the Click's YorShortUrl Status
$clicks = ClickService::get([
'status' => [
'active',
'expired',
'expiring' // within 30 minutes of expiring
]
]);
Filtered on YorShortUrl Identifier(s)
$clicks = ClickService::get([
'identifier' => [
'xyz',
'yxz'
]
]);
Iterate Through Results With Batches
$clicks = ClickService::get([
'limit' => 500
'offset' => 1500
]);
$clicks->get('results');
$clicks->get('total');
Putting it all Together
/**
* Get the successfully routed clicks for all active short urls that are owned by Model IDs 1,2,3 and 4.
* Set the offset of results by 1500 clicks and limit by the results by 500.
*/
$clicks = ClickService::get([
'ownership' => Model::whereIn('id', [1,2,3,4])->get()->toArray(),
'outcome' => [
3 // successful_routed
],
'status' => [
'active'
],
'limit' => 500
'offset' => 1500
]);
composer test