emadha/eloquent-views

一个Laravel Composer包,将视图附加到Eloquent模型上,使渲染模型视图更加容易。

v1.1.1 2022-03-01 23:08 UTC

This package is auto-updated.

Last update: 2024-09-29 05:29:09 UTC


README

Total Downloads Latest Stable Version License

一个Composer包,用于将渲染方法附加到Eloquent模型上。

我发现使用单行代码如model->render('view');渲染模型视图比去控制器,或者把它放在blade中的@include里,或者用多行代码来实现这一点要简单得多。使用这个包,你可以轻松做到这一点。

需求

此包需要Laravel 5.8或更高版本,PHP 7.2或更高版本。

安装

您可以通过composer安装此包

composer require emadha/eloquent-views

该包将自动注册自己。

您可以使用以下命令发布配置:

php artisan vendor:publish --provider="EmadHa\EloquentViews\ServiceProvider" --tag="config"

配置文件包含eloquent视图的根目录

<?php
return [
    /**
     * The root directory of Eloquent views path in resources
     * by default it's using /resources/eloquent/{model name}
     */
    'path' => 'eloquent',
];

使用方法

HasEloquentViews特质添加到您的eloquent模型中,您就可以开始使用这个包了。

...
class Post extends Model {
   use \EmadHa\EloquentViews\HasEloquentViews;
   ...
}

视图目录结构如下:resources/views/eloquent/{model}/{view}其中eloquent在配置文件中定义,model是您的模型类名(小写),例如post,而view是您要渲染的视图。

示例

# Render a single model view
Post::first()->render('block'); // Single block, rendered.

# Build views for a colletion of models
# This will return a collection object.
Post::all()->render('block');

# You can use 'implode' to get this as a single html string e.g. ...->implode(null);
Post::all()->render('block')->implode(null);

此代码将查找/resources/views/eloquent/post/block.blade.php并渲染它。

  • 数据将通过$model变量传递到视图中。
  • 您可以在render方法的第一个参数之后传递一个数组,例如:Post::first()->render('block', ['moredata'=>'Yes!]);

您可以从视图中像通常那样访问这些数据

<!-- /resources/views/eloquent/post/block.blade.php -->
<h1> {{ $model->title }} </h1>
<p> {{ $moredata }} </p>

它的美妙之处

你不妨试试用这个替代包含或反复创建相同的代码?

<!-- welcome.blade.php -->

<div class="news-items">
   {!! App\NewsItem::all()->render('block')->implode(null) !!}
</div>

不仅如此,想象一下,如果你想在你控制器中(例如API或搜索控制器)获取渲染视图的输出,这将使这一方面的工作尽可能简单!

谢谢。