coderabbi / virtuoso

Laravel 可组合视图组合器包 - 通过轻松地从简单的组件组合器组合复杂的视图组合器,无需不必要的间接或样板代码,提高灵活性并减少代码重复。

v0.9.4 2014-07-01 23:49 UTC

This package is not auto-updated.

Last update: 2024-09-24 07:22:11 UTC


README

image

Laravel Virtuoso

Laravel 可组合视图组合器包

通过轻松地从简单的组件组合器组合复杂的视图组合器,无需不必要的间接或样板代码,提高灵活性并减少代码重复。

背景

在我们的许多项目中,相同的数据经常在多个页面上重复出现。这给我们带来了在控制器中准备这些数据并提供给我们的各种视图而不造成过多的代码重复的挑战。Laravel 通过一种称为视图组合器的抽象来提供限制这种潜在重复的能力。视图组合器允许您将此代码抽象到单个位置,并使其可供多个视图使用。视图组合器只是一段代码,它与视图绑定并在请求该视图时执行。

来自 Laravel 文档的示例视图组合器

View::composer('profile', function($view)
{
	$view->with('count', User::count());
}

视图组合器也可以作为类创建

<?php namespace My\Project\Name\Space;

class UserCountComposer
{

	public function compose($view)
	{
		$view->with('count', User::count());
	}

}

当然,当视图组合器作为类创建时,视图组合器与视图之间的关联必须注册,可以使用以下语法

View::composer('profile', 'UserCountComposer');

或者通过服务提供者

<?php namespace My\Project\Name\Space;
 
use Illuminate\Support\ServiceProvider;
 
class ComposerServiceProvider 
	extends ServiceProvider 
{
 
	public function register()
  	{
    	$this->app['view']->composer('profile', 'My\Project\Name\Space\UserCountComposer');
  	}
 
}

视图组合器提供的数据可以通过像控制器提供的那样访问

<ul>
	@foreach ($data as $datum)
		<li>{{ $datum }}</li>
	@endforeach
</ul>

附加资源

应用

不幸的是,Laravel 视图组合器的默认功能可能有些繁琐。

如果我们选择使用 View::composer() 格式,我们的引导文件会很快变得庞大而难以管理。另一方面,如果我们选择基于类的方案,除了创建视图组合器类之外,我们还需要注册我们的组合器/视图关联。这又带来了一些挑战。我们可能会选择创建一个服务提供者来注册每个我们的组合器/视图关联,这会导致我们的服务提供者充斥着重复的样板代码。或者,我们可能会选择创建一个服务提供者来注册所有我们的组合器/视图关联,但这只是简化了我们的引导文件,却牺牲了一个难以管理的服务提供者。也许最好的选择是为每个视图创建一个服务提供者,并在其中注册其视图组合器关联,但这需要相当多的样板代码,并极大地增加了视图组合器已经存在的间接性。

这就是 Virtuoso 意在解决的问题。Virtuoso 允许您轻松创建针对数据的简单、单一焦点的视图组合器,并在需要时通过将一个或多个视图组合器与单个视图关联到“组合组合器”来利用组合,而无需任何不必要的间接或重复的样板代码 - 所有您的组合器/视图关联都可以在一个位置找到,而且无需编写任何新的服务提供者!

要求

Virtuoso 支持以下版本的 PHP

  • PHP 5.4.*
  • PHP 5.5.*
  • PHP 5.6.*
  • HHVM

以及以下版本的 Laravel

  • Laravel 4.1.*
  • Laravel 4.2.*

安装

首先,通过Composer(Virtuoso位于Packagist)安装Virtuoso,可以通过将其添加到你的composer.json文件的Require Array中

"require": {
    "coderabbi/virtuoso": "0.*"
}

或者从命令行进行安装

php composer.phar require coderabbi/virtuoso:0.*

接下来,更新app/config/app.php,在Providers Array中包含此包的Service Provider引用

'providers' => array(
    'Coderabbi\Virtuoso\ComposerServiceProvider'
)

最后,更新app\config\view.php,包含Composers Array

'composers' => array (
)

使用方法

简单的视图组合器

首先,像往常一样创建你的视图组合器(确保实现Composer接口)

<?php namespace My\Project\Name\Space;

use Coderabbi\Virtuoso\Composer;

class MyFirstSimpleComposer
	implements Composer
{

	public function compose($view)
	{
		$view->with('myData', $this->getMyData());
	}
	
	private function getMyData()
	{
		// do your thing here
	}
	
}

理想情况下,你应该将每个组合器提供的数据限制为其最简单、最连贯的单元。这将使你更轻松地为视图创建复合视图组合器。

接下来,通过将简单视图组合器(包括命名空间的全限定类名)添加到app\config\view.php中的Composers Array中,将视图(在app/config/view.php中指定的视图目录中的完整路径,使用点符号表示)与其关联

'composers' => array (
	'partials.header' => 'My\Project\Name\Space\MyFirstSimpleComposer',
)

就这样!Virtuoso将为你处理视图/组合器的注册,无需新的Service Providers!

你可以像通常一样从视图中访问简单视图组合器提供的数据。

复合视图组合器

首先,创建将一起构成复合视图组合器的简单视图组合器(但不要在app\config\view.php中的组合器Array中与视图关联)。

接下来,创建你的复合视图组合器(确保扩展CompositeComposer),并将其组件视图组合器添加到其$composers数组中

<?php namespace My\Project\Name\Space;

use Coderabbi\Virtuoso\CompositeComposer;

class MyFirstCompositeComposer
	extends CompositeComposer
{

	protected $composers = array(
		'MyFirstSimpleComposer',
		'MySecondSimpleComposer',
		'MyThirdSimpleComposer'
	);
	
}

最后,通过将复合视图组合器(包括命名空间的全限定类名)与视图(在app/config/view.php中指定的视图目录中的完整路径,使用点符号表示)关联,将其添加到app\config\view.php中的组合器Array中

'composers' => array (
	'partials.header' => 'My\Project\Name\Space\MyFirstCompositeComposer',
)

就这样!Virtuoso将为你处理单个视图/组合器的注册,无需新的Service Providers!

你可以像通常一样从视图中访问复合视图组合器提供的数据。

路线图

添加测试将使该包达到v1.0。这是一个非常简单的包,旨在解决Laravel视图组合器标准实现中的单个限制,因此目前我没有关于该包的进一步计划。如果你愿意,欢迎提交问题或拉取请求;我将全神贯注于每一项。

许可证

此包是开源软件,根据MIT许可证授权。更多详细信息可以在LICENSE文件中找到。

作者

关注Twitter上的@coderabbi