oddvalue / link-builder
为模型生成URL和链接的一致接口
v1.1.1
2020-05-19 22:35 UTC
Requires
- php: ~7.3
- illuminate/contracts: >=6.0
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.27.0
- phpunit/phpunit: >=7.0
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-08-28 03:58:00 UTC
README
为PHP模型生成URL和链接的一致接口。
安装
通过Composer
$ composer require oddvalue/link-builder
使用
创建生成器
首先,您需要一个用于您模型的生成器类。这个生成器类将负责决定您模型链接的href和标签。
这是最小生成器设置
<?php namespace App; use Oddvalue\LinkBuilder\Link; class ArticleLink extends Link { /** * The attribute on the model from which the link href is derived * * @var string */ protected $hrefAttribute = 'slug'; /** * The attribute on the model to use as the link text * * @var string */ protected $labelAttribute = 'title'; }
您不必扩展 \Oddvalue\LinkBuilder\Link
,唯一的要求是生成器实现 \Oddvalue\LinkBuilder\Contracts\LinkGenerator
。
准备您的模型
接下来,在您的模型中实现 \Oddvalue\LinkBuilder\Contracts\Linkable
。还有一个用于方便使用的trait,但不是必须使用:\Oddvalue\LinkBuilder\Traits\LinkableTrait
例如
<?php namespace App; use App\ArticleLink; use Oddvalue\LinkBuilder\Contracts\Linkable; use Oddvalue\LinkBuilder\Traits\LinkableTrait; class LinkableModel implements Linkable { use LinkableTrait; public $title; public $slug; /** * Get the fully qualified class name of the model's link generator * * @return string */ protected function getLinkGeneratorClass() { return ArticleLink::class; } }
生成链接
一旦您为所有可链接模型设置了相应的链接生成器,您将有一个一致接口来处理它们在应用中的URL和链接。
e.g.
$model = new Article; echo $model->getLinkGenerator()->toHtml(); # output: <a href="/bar">foo</a> echo (string) $model->getLinkGenerator(); # output: <a href="/bar">foo</a> echo $model->getLinkGenerator()->label(); # output: foo echo $model->getLinkGenerator()->href(); # output: /bar
还有一个用于获取模型链接生成器的辅助方法
echo get_link($model)->toHtml(); # output: <a href="/bar">foo</a> echo (string) get_link($model); # output: <a href="/bar">foo</a> echo get_link($model)->label(); # output: foo echo get_link($model)->href(); # output: /bar
链接属性
为了在生成的链接上设置类和其他属性,您可以通过在getLinkGenerator(array)
方法上的选项数组中传递它们,或者可以在生成器本身上调用setAttributes(array)
方法。
$options = [ 'attributes' => [ 'class' => ['button', 'is-disabled'], 'role' => 'button', 'disabled', ] ]; echo (string) $model->getLinkGenerator($options); echo (string) get_link($model, $options); # output: # <a href="/bar" class="button is-disabled" role="button" disabled>foo</a> # <a href="/bar" class="button is-disabled" role="button" disabled>foo</a>