rtablada / inspector-gadget
一个受 Laravel 视图启发的数据流库的 Web 组件。
Requires
- php: >=5.4.0
- illuminate/contracts: ~5
- illuminate/support: ~5
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
This package is not auto-updated.
Last update: 2024-09-14 16:36:46 UTC
README
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)。请参阅 许可证文件 了解更多信息。