locustv2 / yii2-linkable-behavior
简化了创建URL和链接的过程。
1.0.0
2017-03-31 15:58 UTC
Requires
- yiisoft/yii2: ~2.0.4
This package is not auto-updated.
Last update: 2024-09-15 02:57:30 UTC
README
此扩展帮助在yii2中更轻松地创建URL。此行为为具有显示其内容的页面的组件提供支持。页面可以是模块中的操作或控制器中的简单操作。无需反复编写URL路由即可轻松获取与此记录相关的链接。
安装
通过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 ]; }, ] ]); } }
代码就绪后,您现在可以在您的User和Photo 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文件。