haganjones/laravel-viewables

基于类的处理Laravel视图的方法。

0.2.0 2018-01-17 11:20 UTC

This package is auto-updated.

Last update: 2024-09-10 06:11:30 UTC


README

类似于Laravel的Mailables,Viewables允许您采用基于类的处理方法来处理和操作Laravel中的视图。

通过Composer安装

composer require "haganjones/laravel-viewables"

包含服务提供者

config/app.php中将以下内容添加到服务提供者数组中

HaganJones\LaravelViewables\Providers\ServiceProvider::class,

编写Viewables

所有可查看类的配置都在build方法中完成。在这个方法中,您可以调用各种方法,如viewwith来渲染视图并传递数据。

配置视图

在可查看类的build方法中,您可以使用view方法指定渲染视图时应该使用哪个模板

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->view('dashboard');
}

视图数据

通过公共属性

通常,您可能希望将一些数据传递到视图中,以便在渲染视图的HTML时使用。您有两种方法可以使数据可用于视图。首先,在您的可查看类上定义的任何公共属性将自动可用于视图。例如,您可以将数据传递到可查看类的构造函数中,并将其设置为类的公共属性

<?php
namespace App\View;
 
use App\User;
use HaganJones/LaravelViewables/View/Viewable;
 
class DashboardView extends Viewable
{
    /**
     * The user instance.
     *
     * @var User
     */
    public $user;
 
    /**
     * Create a new viewable instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
 
    /**
     * Build the view.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('dashboard');
    }
}

一旦数据被设置为公共属性,它将自动可用于视图,因此您可以像访问任何其他数据一样访问它

<div>
    Logged in as: {{ $user->name }}
</div>

通过with方法

如果您想在数据发送到模板之前自定义其格式,您可以通过with方法手动将数据传递到视图中。通常,您仍然会通过可查看类的构造函数传递数据;然而,您应将此数据设置为protectedprivate属性,以便数据不会自动可用于模板。然后,在调用with方法时,传递一个包含您希望使模板可用的数据的数组

<?php
namespace App\View;
 
use App\User;
use HaganJones/LaravelViewables/View/Viewable;
 
class DashboardView extends Viewable
{
    /**
     * The user instance.
     *
     * @var User
     */
    protected $user;
 
    /**
     * Create a new viewable instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
 
    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('dashboard')
            ->with([
                'userName' => $this->user->name,
                'userEmail' => $this->user->email,
            ]);
    }
}

一旦数据传递给了with方法,它将自动可用于视图,因此您可以像访问任何其他数据一样访问它

<div>
    Logged in as: {{ $userName }}
</div>

渲染视图

要服务视图,请使用辅助函数viewable()。您可以将您可查看类的实例传递到这个辅助函数中

从版本0.2开始,Viewables实现了Laravel的Responsable接口,这使得您可以从控制器中直接返回Viewable类的实例。虽然viewable()函数仍然可用,但将在未来的版本中删除。

<?php
namespace App\Http\Controllers;
 
use App\User;
use App\View\DashboardView;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
 
class DashboardController extends Controller
{
    /**
     * Show the dashboard page
     *
     * @return Response
     */
    public function get()
    {
        //return viewable(
        //    new DashboardView(Auth::user())
        //);
        
        return new DashboardView(Auth::user());
    }
}