rtablada/inspector-gadget

一个受 Laravel 视图启发的数据流库的 Web 组件。

1.1.0 2015-10-05 13:08 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:36:46 UTC


README

Latest Version Software License Build Status Total Downloads

Inspector Gadget 是一个受 Web 组件Ember.js 启发的库,用于改进数据流、可维护性和模板重用性。

在 inspector gadget 中,小工具允许以智能和明确的方式渲染模板部分或纯字符串,同时减少重量和过载的控制器或领域层。

安装

通过 Composer

$ composer require rtablada/inspector-gadget

app.php 配置文件中,将 'Rtablada\InspectorGadget\GadgetServiceProvider', 添加到 providers 数组。

然后使用 php artisan vendor:publish 命令发布配置文件以发布 config/inspector-gadget.php 文件。

注意

您可以可选地将 Rtablada\InspectorGadget\Facades\Gadget' 安装到 facades 数组中,作为 Gadget 使用,以便在视图中使用小工具外观。

用法

小工具类

小工具只是带有 render 方法的普通 PHP 对象。由 render 函数返回的字符串将被发送回您的视图。由于小工具是通过应用程序容器解析的,因此您可以在应用程序中的任何其他类一样进行依赖注入。

class ExampleGadget
{
    public function render()
    {
        return 'this string will be returned';
    }
}

使用 GadgetFactory 创建小工具

在您的视图中,您可以使用视图中的 gadgetFactory 变量的 make 函数来渲染小工具。该 make 函数接受一个字符串参数,表示您要在视图中渲染的小工具类。

$gadgetFactory->make('ExampleGadget'); // returns 'this string will be returned'

向小工具传递参数

为了提供更大的灵活性,您可以向小工具中的 render 函数传递参数。

// app/Gadgets/ArgumentGadget.php
class ArgumentGadget
{
    public function render($str)
    {
        return $str . ' from gadget';
    }
}

// view.php
$gadgetFactory->make('ArgumentGadget', 'test'); // returns 'test from gadget'

快捷方式

如果您已注册 Gadget 外观,则可以在视图中使用以下内容

Gadget::make('ExampleGadget');

如果您使用 blade 模板,则有一个 @gadget 辅助函数调用 $gadgetFactory->make()

@gadget('ExampleGadget')

更好的数据流

考虑以下控制器操作

public function show($id)
{
    $post = $this->post->find($id);
    $relevantPosts = $this->suggestionEngine->relevantPosts($post);
    $comments = $this->comment->allForPost($post);

    $user = $this->auth->user();

    $userHistory = $this->historyCache->historyForUser($user);
    // etc.

    return view('post.show', compact('post', 'relevantPosts', 'comments', 'user', 'userHistory', '...'));
}

以及相应的视图

<div class="sidebar">
    <div class="user-history">
        <h4>History</h4>
        <?php foreach ($userHistory->posts as $historyPost) ?>
            <!-- Markup for $historyPost-->
        <?php endforeach ?>
    </div>

    <div class="suggested-articles">
        <h4>Things You Might Like</h4>
        <?php foreach ($relevantPosts as $relevantPost) ?>
            <!-- Markup for $relevantPost-->
        <?php endforeach ?>
    </div>

    <!-- etc. -->
</div>

这可以通过小工具进行清理

// Controller
public function show($id)
{
    $post = $this->post->find($id);
    $user = $this->auth->user();

    return view('post.show', compact('post', 'user'));
}
// View
<div class="sidebar">
    <div class="user-history">
        <h4>History</h4>
        @gadget('UserPostHistory', $user)
    </div>

    <div class="suggested-articles">
        <h4>Things You Might Like</h4>
        @gadget('RelevantPosts', $post)
    </div>

    <!-- etc. -->
</div>

配置

默认命名空间

为了缩短在您的 Gadget::make 调用中需要完整的类名,Inspector Gadget 在 config/inspector-gadget.php 文件中有一个 namespace 配置选项。这用作查找小工具的默认命名空间。如果您的配置默认命名空间中没有找到类,则 Inspector Gadget 将尝试从完整的类名加载。

别名

为了进一步简化和简化,您可以在 config/inspector-gadget.php 文件中的 aliases 数组中注册别名。这允许小工具被别名化,而不会污染应用程序容器。

测试

$ phpunit

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请通过电子邮件 ryan@embergrep.com 而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。