mfn/laravel-view-obj

Laravel 基于对象的视图模板

0.2 2015-11-28 12:30 UTC

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