ファサードはインスタンスメソッドをスタティックメソッドにしてくれる Laravel の仕組みです.

パッケージ作成

作成するパッケージの authors 情報を workbench\crgst\ui\src\Crgst\Ui\UiServiceProvider.php で設定出来ます. 以下のコマンドでパッケージ作成します:

php artisan workbench Crgst/ui --resources

サービスプロパイダー

パッケージの基本設定を記述します.

workbench/crgst/ui/src/Crgst/Ui/UiServiceProvider.php:

namespace Crgst\Ui;
use Illuminate\Support\ServiceProvider;

class UiServiceProvider extends ServiceProvider {

    (省略)

    public function register()
    {
        $this->app->bind('ui', function ($app) {
            return new UiBuilder($app['html'], $app['url'], $app['request']);
        });
    }

    (省略)
}

ファサード

workbench/crgst/ui/src/Crgst/Ui/Facades/UI.php:

namespace Crgst\Ui\Facades;

class UI extends \Illuminate\Support\Facades\Facade {

    protected static function getFacadeAccessor() { return 'ui'; }
}

workbench/crgst/ui/src/Crgst/Ui/UiBuilder.php:

namespace Crgst\Ui;

use Illuminate\Html\HtmlBuilder;
use Illuminate\Routing\UrlGenerator;
use Illuminate\Http\Request;

class UiBuilder {

    protected $html;

    protected $url;

    protected $request;

    public function __construct(HtmlBuilder $html, UrlGenerator $url = null, Request $request)
    {
        $this->html = $html;
        $this->url = $url;
        $this->request = $request;
    }

    public function attr($attr, $conditions)
    {
        list($attr, $value) = explode('.', $attr);
        foreach ((array)$conditions as $k => $v) {
            if ($k == 'url' && preg_match('#^' . $v . '$#', $this->request->url())) {
                return $this->html->attributes([$attr => $value]);
            } elseif ($k == 'action' && $this->url->action($v) == $this->request->url()) {
                return $this->html->attributes([$attr => $value]);
            }
        }
        return '';
    }
}

出来たもの

UI::attr('class.current', ['url' => '/admin/categories'])

とすると, URL が /admin/categories の時に

class="current"

が出力されます.