emadha / eloquent-views
一个Laravel Composer包,将视图附加到Eloquent模型上,使渲染模型视图更加容易。
v1.1.1
2022-03-01 23:08 UTC
Requires
- php: ^7|^8.0
- laravel/framework: ^7.0|^8.0|^9.0
README
一个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或搜索控制器)获取渲染视图的输出,这将使这一方面的工作尽可能简单!