2017 © Pedro Peláez
 

yii2-extension yii2-linkable-behavior

Makes it easier to create urls and links.

image

locustv2/yii2-linkable-behavior

Makes it easier to create urls and links.

  • Friday, April 7, 2017
  • by Locustv2
  • Repository
  • 2 Watchers
  • 11 Stars
  • 29 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 0 Open issues
  • 2 Versions
  • 4 % Grown

The README.md

Linkable Behavior for Yii2 Components

This extension help creating urls easier in yii2. This behavior provides support for components that have a page to display its contents. The page can be an action in a Module or simply in a Controller. It will be easier to get links related to this record without having to write Url Route over and over again., (*1)

Latest Stable Version Total Downloads Latest Unstable Version License, (*2)

Installation

The preferred way to install the library is through composer., (*3)

Either run, (*4)

php composer.phar require --prefer-dist locustv2/yii2-linkable-behavior

or add, (*5)

{
    "require": {
        "locustv2/yii2-linkable-behavior": "~1.0.0"
    }
}

to your composer.json file., (*6)

Usage

Add the behavior to your ActiveRecord that can he hotlinked:, (*7)

namespace app\models;

use yii\db\ActiveRecord;
use locustv2\behaviors\LinkableBehavior;

class User extends ActiveRecord
{
  //...

    public function behaviors()
    {
        return ArrayHelper::merge(parent::behaviors(), [
            [
                'class' => LinkableBehavior::className(),
                'route' => '/user',
                'defaultAction' => 'view',
                'hotlinkTextAttr' => 'username',
                'defaultParams' => function ($record) {
                    return [
                        'id' => $record->id,
                    ];
                },
            ]
        ]);
    }
}
namespace app\models;

use yii\db\ActiveRecord;
use locustv2\behaviors\LinkableBehavior;

class Photo extends ActiveRecord
{
  //...

    public function behaviors()
    {
        return ArrayHelper::merge(parent::behaviors(), [
            [
                'class' => LinkableBehavior::className(),
                'route' => '/photo',
                'defaultAction' => 'view',
                'linkableParams' => function ($record) {
                    return [
                        'photoid' => $record->id,
                    ];
                },
                'useAbsoluteUrl' => true,
                'defaultParams' => function ($record) {
                    return [
                        'id' => $record->id,
                        'slug' => $record->slug
                    ];
                },
            ]
        ]);
    }
}

With that code in place, you can now use 4 available methods in your User and Photo ActiveRecord: - getUrlRoute($action = null, array $params = []) - getUrlRouteTo(Component $component, $action = null) - getHotlink($action = null, array $params = [], array $options = []) - getHotlinkTo(Component $component, $action = null, array $params = [], array $options = []), (*8)

Examples (assuming that you use pretty urls)

getUrlRoute($action = null, array $params = [])

use yii\helpers\Url;
use app\models\User;

$user = User::findOne(['id' => 123]);

// /user/view?id=123
echo Url::to($user->urlRoute);

// /user/update?id=123
echo Url::to($user->getUrlRoute('update'));

// http://www.yoursite.com/user/profile?id=123&ref=facebook
echo Url::to($user->getUrlRoute('profile', ['ref' => 'facebook']), true);

getUrlRouteTo(Component $component, $action = null)

use yii\helpers\Url;
use app\models\User;

$user = User::findOne(['id' => 123]);
$photo = $user->getPhotos()->one();

// /user/photo/view?id=123&photoid=456&slug=my-first-photo
echo Url::to($user->getUrlRouteTo($photo));

// /photo/user/view?id=456&slug=my-first-photo&uid=123
echo Url::to($photo->getUrlRouteTo($user));

// /user/photo/update?id=123&photoid=456&slug=my-first-photo
echo Url::to($user->getUrlRouteTo($photo, 'update'));

getHotlink($action = null, array $params = [], array $options = [])

use yii\helpers\Url;
use app\models\User;

$user = User::findOne(['id' => 123]);

// <a href="/user/view?id=123">Locustv2</a>
echo $user->hotLink;

// <a href="/user/update?id=123">Locustv2</a>
echo $user->getHotlink('update');

// <a class="text-bold" href="/user/profile?id=123&ref=facebook">Locustv2</a>
echo $user->getHotlink('profile', ['ref' => 'facebook'], ['class' => 'text-bold']);

If you want to use absolute urls, you should set LinkableBehavior::$useAbsoluteUrl to true. If you want to disable hotlinks, you should set LinkableBehavior::$disableHotlink to true. <span/> will be used instead of <a/>, (*9)

getHotlinkTo(Component $component, $action = null, array $params = [], array $options = [])

use yii\helpers\Url;
use app\models\User;

$user = User::findOne(['id' => 123]);
$photo = $user->getPhotos()->one();

// <a href="http://www.yoursite.com/user/photo/view?id=123&photoid=456&slug=my-first-photo">Locustv2</a>
echo $user->getHotlinkTo($photo);

// <a href="http://www.yoursite.com/photo/user/view?id=456&slug=my-first-photo&uid=123">http://www.yoursite.com/photo/user/view?id=456&slug=my-first-photo&uid=123</a>
echo $photo->getHotlinkTo($user);

// <a class="font-bold" href="http://www.yoursite.com/user/photo/update?id=123&photoid=456&slug=my-first-photo&ref=homepage">Locustv2</a>
echo Url::to($user->getHotlinkTo($photo, 'update', ['ref' => homepage], ['class' => 'font-bold']));

To do

  • Add unit tests

Contributing

Feel free to send pull requests., (*10)

License

For license information check the LICENSE-file., (*11)

The Versions

07/04 2017

dev-master

9999999-dev https://github.com/locustv2/

Makes it easier to create urls and links.

  Sources   Download

BSD-3-Clause

The Requires

 

by Yuv Joodhisty

url yii2 behavior link linkable

31/03 2017

1.0.0

1.0.0.0 https://github.com/locustv2/

Makes it easier to create urls and links.

  Sources   Download

BSD-3-Clause

The Requires

 

by Yuv Joodhisty

url yii2 behavior link linkable