oddvalue / link-builder

为模型生成URL和链接的一致接口

v1.1.1 2020-05-19 22:35 UTC

This package is auto-updated.

Last update: 2024-08-28 03:58:00 UTC


README

为PHP模型生成URL和链接的一致接口。

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

安装

通过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>