truemedia/handlelars

Handlebars 的 Laravel 5 封装

5.0.5 2015-02-07 23:21 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:33:16 UTC


README

A Laravel 的封装,用于 Lightncandy,这是一个 https://handlebars.node.org.cn/ 的 PHP 实现

致谢

支持

  • Laravel 5
  • Handlebars 2.0+

安装

将 handlelars 添加为依赖项到您的 composer.json 文件

"require": {
	"laravel/framework":      "~5.0",
	"truemedia/handlelars": "dev-master"
}

运行 composer update,或者如果这是一个全新的项目,运行 composer install

添加服务提供者

打开:config/app.php

...

'Handlelars\HandlelarsServiceProvider',
	
...

您已经设置好了!

使用方法

Handlelars 是一个仅用于将 Lightncandy 库集成到 Laravel 5+ 的包装器。

Handlelars 与 Laravel 视图类注册自身,提供与 Laravel 的无缝集成。您可以使用 Handlebars 就像使用 Blade 一样!Laravel 视图类将根据视图的文件扩展名选择正确的模板引擎。所以您要做的只是确保您的视图有 .hbs 文件扩展名。Handlelars 将处理其余的部分。

您甚至可以混合和匹配模板引擎。例如,您可能有一个 Blade 布局文件,您想要嵌套一个 Handlebars 视图,这是可以的!Handlebars 视图将被渲染到传递给视图的任何部分的变量中。例如,如果您这样做:

$view->nest('content', 'some.view');
$view->nest('sidebar', 'some.sidebar');

解析后的 some.view 文件的 内容将在模板文件下的一个名为 $content 的变量中可用。解析后的 some.sidebar 的内容将在模板文件下,一个名为 $sidebar 的变量中可用。

默认情况下,Handlebars 部分也是使用 Laravel 的 ViewFinder 加载的,因此您可以自由地使用点符号来指定一个视图。

{{#posts}}
	{{> posts._post}}
{{/posts}}

除此之外,一切照旧!

示例

  • 使用 View::make() 的示例

    app/views/test.hbs

      <h1>{{ pageHeading }}</h1>
      <div>
      	{{ pageContent }}
      </div>
    

    app/router.php

      Route::get('/', function()
      {
      	return View::make('test', array(
      		'pageHeading' => 'Rendered with Lightncandy',
      		'pageContent' => 'But still looks like Laravel!'
      	));
      });
    
  • 使用 Blade 控制器布局的示例

    app/views/layouts/master.blade.php

      <html>
      <head></head>
      <body>
      	{{ content }}
      </body>
      </html>
    

    app/views/test.mustache

      <h1>{{ pageHeading }}</h1>
      <div>
      	{{ pageContent }}
      </div>
    

    app/controllers/TestController.php

      <?php
    
      class TestController extends BaseController {
      
          public $layout = 'layouts.master';
          
          public function index()
          {
       	$this->layout->nest('content', 'test', array(
       		'pageHeading' => 'Rendered with Lightncandy',
      		'pageContent' => 'But still looks like Laravel!'
       	));   
          }
          
      	}
    
  • 使用 Handlebars 布局的示例

    app/views/posts/_post.hbs

      <article>
      	<h2>{{ title }}</h2>
      	<div>
      		{{ content }}
      	</div>
      </article>
    

    app/views/blog/index.hbs

      <html>
      <head></head>
      <body>
      	<h1>My Blog</h1>
      	
      	{{#posts}}
      		{{> posts._post}}
      	{{/posts}}
      </body>
      </html>
    

    app/routes.php

      Route::get('/', function()
      {
      	$posts = array(
      		array(
      			'title' => 'This is a Title',
      			'content' => 'lorem ipsum...'
      		),
      		array(
      			'title' => 'This is a another title',
      			'content' => 'lorem ipsum...'
      		),
      		array(
      			'title' => 'This is yet another Title',
      			'content' => 'lorem ipsum...'
      		),
      	);
      	
      	return View::make('blog.index', compact('posts));
      });
    

关于模板数据的说明

Laravel 预期 视图数据array 的形式传递。

然而,Handlebars PHP 还允许使用上下文对象。

如果您想使用上下文对象,传递一个带有 __context 键的数组,这将被使用。例如:

`return view('my.view', ['__context' => new Context]);`

配置

您可以在 ConfigServiceProvider 中更改传递给 Lightncandy 的配置选项。例如:

config([
	'handlelars.cache' => storage_path() . '/framework/views/handlebars',
]);

所有 handlelars. 选项都直接传递给 Mustache_Engine 构造函数,所以您可以使用与 Lightncandy 相同的任何选项