locustv2/yii2-linkable-behavior

简化了创建URL和链接的过程。

安装: 32

依赖项: 0

建议者: 0

安全性: 0

星标: 11

关注者: 2

分支: 1

类型:yii2-extension

1.0.0 2017-03-31 15:58 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:57:30 UTC


README

此扩展帮助在yii2中更轻松地创建URL。此行为为具有显示其内容的页面的组件提供支持。页面可以是模块中的操作或控制器中的简单操作。无需反复编写URL路由即可轻松获取与此记录相关的链接。

Latest Stable Version Total Downloads Latest Unstable Version License

安装

通过composer安装库是首选方式。

运行以下命令:

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

或者

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

将以下内容添加到您的composer.json文件中。

用法

将此行为添加到可以热链接的ActiveRecord中

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
                    ];
                },
            ]
        ]);
    }
}

代码就绪后,您现在可以在您的UserPhoto ActiveRecord中使用以下4个可用方法:

  • 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 = [])

示例(假设您使用美观的URL

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']);

如果您想使用绝对URL,应将LinkableBehavior::$useAbsoluteUrl设置为true。如果您想禁用热链接,应将LinkableBehavior::$disableHotlink设置为true。将使用<span/>而不是<a/>

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']));

待办事项

  • 添加单元测试

贡献

请随时发送pull请求。

许可证

有关许可证信息,请参阅LICENSE文件。