mfn / laravel-view-obj
Laravel 基于对象的视图模板
Requires
- php: >=5.5
- illuminate/support: 5.0.x|5.1.x
- illuminate/view: 5.0.x|5.1.x
This package is auto-updated.
Last update: 2024-09-16 17:24:57 UTC
README
主页: https://github.com/mfn/php-laravel-view-obj
要求
PHP 5.5 / Laravel 5.0/5.1
安装/设置
使用 composer: composer.phar require mfn/laravel-view-obj 0.1
在您的 config/app.php
中注册服务提供者,通过添加以下行到您的 providers
条目:Mfn\Laravel\ViewObj\Provider::class
发布配置
php artisan vendor:publish --provider="Mfn\Laravel\ViewObj\Provider"
文档
此包利用对象类层次结构将其转换为视图模板的路径,例如,如果您想“查看”类型为 App\Article
的对象,提供的辅助函数 view_obj()
将尝试渲染视图 _view_obj.App.Article.default
,这通常映射到您的路径 <PROJECT_ROOT>/resources/views/_view_obj/App/Article/default.php
(或 default.blade.php
)。该对象本身将作为 $obj
传递给该视图。
从概念上讲,您可以将其视为一个部分,其中视图的名称来自对象的类层次结构。视图本身可以通过文件系统进行层次组织,类也是如此。此包重用这些信息用于视图。
想法是对象根据上下文具有不同的表示形式。默认上下文是“默认”(...),但如果您想将 $article
作为列表的一部分渲染,您将创建适当的列表模板并使用 @view_obj($article, 'list')
调用辅助函数。因此,理想情况下,所有表示 App/Article
的变体都位于此目录中,即 _view_obj/App/Article/
。
辅助函数的签名是
view_obj(object $object, string $template = 'default', array $data = []): View
-
object $object
您想要渲染的任何对象。可以是模型或几乎任何东西,只要您在适当的位置为其创建了视图模板 -
string $template
该对象的实际视图。概念是,根据您想要渲染对象的上下文,您可能想要使用不同的视图。 -
array $data
您想要传递给模板的任何数据。除了以下说明外,视图只会接收显式传递的变量。注意:对象本身始终可用作$obj
。 -
返回一个
View
对象。
对于 Blade,提供了具有相同签名的 @view_obj
指令,但它将自动 echo
返回的 View
,而在纯 PHP 代码中,您将接收到一个 View
对象并需要自行对其进行操作(例如 echo ...
或 ->__toString()
)。
为了方便起见,辅助函数仅接受 (object $object, array $data)
,即您可以为默认情况省略 $template
。
示例
在最简单的情况下,显示对象的默认视图。假设类 App\Article
,我们首先在 resources/views/_view_obj/App/Article/default.blade.php
中创建默认模板
resources/views/
是 Laravel 应用程序的默认位置_view_obj/
是所有从对象派生的视图模板的(默认)配置“前缀”App/Article/
反映了类层次结构default
是显示对象时未指定模板的“默认”.blade.php
只是 Laravel 的默认 Blade 扩展;可以是纯 PHP 模板中的.php
。
此类视图的示例
注意:我们渲染的对象总是以 $obj
的形式传递
<article> <h1>{{ $obj->title }}</h1> <div> {{ $obj->content }} </div> </article>
在视图中传递文章的任何地方,您都可以使用以下方式调用视图
@view_obj($article)
现在我们假设您想将文章作为列表的一部分渲染,即您有一个文章数组。我们首先在 resources/views/_view_obj/App/Article/list.blade.php
中为文章创建一个 list
模板。我们通常只在列表中显示链接/标题
<li> <a href="{{ URL::route('article', [$obj->id]) }}"> {{ $obj->title }} </a> </li>
现在使用 list
视图
@foreach ($articles as $article) @view_obj($article, 'list'); @endforeach
配置
base_path
:默认为_view_obj
,并指定所有对象模板特定视图的前缀。如果您不想有这种分离,只需将其设置为空字符串。
贡献
将其分叉,在功能分支上修改,创建一个拉取请求,表现得棒棒的!
没有开发者是孤岛,因此请遵守这些标准
© Markus Fischer markus@fischer.name