ifnot/renderable

此包已被废弃,不再维护。未建议替代包。

Renderable 是 Laravel 的 PHP 展示器,基于 blade 视图,可直接在视图中展示 Eloquent 模型。

dev-master 2015-03-16 18:02 UTC

This package is auto-updated.

Last update: 2020-02-05 22:56:05 UTC


README

Renderable 是 Laravel 的 PHP 展示器,基于 blade 视图,可直接在视图中展示 Eloquent 模型。

安装

只需使用 composer 安装此包。

composer require ifnot/renderable

将包服务提供者注册到你的 app.php

'Ifnot\Renderable\RenderableServiceProvider',

它是如何工作的?

Renderable 对象类似于展示器对象,但用于返回视图(完整或部分)。如果你熟悉展示器模式,你应该很容易理解 Renderable 的机制。

此包的主要目标是提供用于渲染模型/属性的视图。如果你想直接在视图中包含模型(或模型属性),而不指定定义它的 HTML,这将非常有用。

此包包含两个方面

  • 属性渲染器
  • 模型渲染器

属性渲染器(基本设置)

我们有一个 Page 模型(它可以是 Eloquent 模型)和一个 PageRenderer(为 Page 分配的渲染器类)。

Page

use Ifnot\Renderable\RenderableTrait;

class Page extends Eloquent {
  use RenderableTrait;
  public $renderer = 'PageRenderer';
}

PageRenderer

use Ifnot\Renderable\Renderer;

class PageRenderer extends Renderer {
  public function title() {
    return $this->render($this->entity->title, 'page.property.title');
  }
}

然后,page.property.title 视图

<h1>{{ $property }}</h1>

现在你可以在应用程序的常规视图中调用 $page->render()->title

  .. other stuff here ...
  
  <div>
    {{ $page->render()->title}}
    
    <p>This is another text, blah blah blah ...</p>
  </div>
  
  .. other stuff here ..

模型渲染器(基本设置)

现在,如果你想通过自身渲染整个模型,而不指定每个属性,我们必须在 PageRenderer 中添加一些配置

PageRenderer

use Ifnot\Renderable\Renderer;

class PageRenderer extends Renderer {
  public $renderable = [
    'model' => [
      'show' => 'page.model'
     ]
  ];
  
  // ...
  // Here, properties declaration (like title in the previous example)
  // ...
}

然后,page.model 视图

<div>
  <h1>{{ $entity->render()->title }}</h1>
  
  <p>{{ $entity->content }}</p>
</div>

现在你可以在视图中调用 $page->render()

.. other stuff here ..

<article>
  {{ $page->render() }}
</article>

.. other stuff here ..

高级设置

  • TODO:关于属性绑定的说明
  • TODO:解释显示模式的使用...