DavidJegat/jimport-bundle

一个简单的 assetic 文件解析器,便于轻松导入 JavaScript 文件。

安装: 6

依赖者: 0

建议者: 0

安全性: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

dev-master 2013-03-24 15:25 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:30:23 UTC


README

Build Status

一个允许你轻松导入客户端 JavaScript 文件的 assetic 过滤器。

@import('js/foo.js');
@import('js/rep/bar.js');
@import('js/myDirectory');

// some js code here ...

如何安装?

在你的 composer.json 中添加以下行

"davidjegat/jimport-bundle": "*"

运行 composer.phar installcomposer.phar update。最后,将包添加到你的 Symfony2 Kernel

	new DavidJegat\JImportBundle\DavidJegatJImportBundle();

完成了!Jimport 已安装在您的 symfony 2 上。

## 如何使用?

首先需要将你的包注册到你的 assetic 配置中

assetic:
	bundles: [ 'YourBundle' ]

现在,使用 assetic 导入你需要的文件,并添加 jimport 过滤器

{% 
	javascripts
	'bundles/your/js/main.js'
	filter="jimport"
%}
	
	<script src="{{asset_url}}"></script>

{% endjavascripts %}

它是如何工作的?

main.js 文件中,注册你的包后,当你想要将其导入 JavaScript 中时,添加以下简单行

@import('js/my/lib.js');

导入优先级

当你将包注册到 assetic.bundles 数组的键中时,@import 函数将查看该包的 Resources/public 目录。如果没有找到文件,则函数将解析下一个包。如果最终没有找到文件,则函数将用空字符字符串替换 @import 语句。

## 与 Jimport 配合使用?编写你自己的扩展!

Jimport 是一个非常简单的文件解析器。它适用于 JavaScript 文件、CSS 文件...任何 assetic 文件。你可以定义自己的 JImport 函数。让我们看看一个例子。你需要创建一个特殊的 JavaScript 函数,允许你从你的项目中获取指定的 URL。一种路由器?让我们来做!

### 第一步,FunctionInterface

你可以通过遵循此接口轻松创建自己的 jimport 函数解析器

namespace DavidJegat\JImportBundle\Functions;

use DavidJegat\JImportBundle\Parser\Parser;

/**
 * Defined JImport Functions behavior
 * 
 * @author David Jegat <david.jegat@gmail.com>
 */
interface FunctionInterface
{
	/**
	 * Return your function name
	 * 
	 * @return string
	 */
	public function getName();

	/**
	 * Execute the function
	 * 
	 * @param array $arguments
	 * @param Parser $parser
	 * @return string, the function relacement
	 */
	public function execute(array $arguments, Parser $parser);
}

### 你自己的函数?

因此,在你的包中创建一个对象,并添加以下代码

namespace My\CoolBundle\Jimport;

use DavidJegat\JImportBundle\Functions\FunctionInterface;
use DavidJegat\JImportBundle\Parser\Parser;

class GiveMeTheUrlFunction implements FunctionInterface
{
	/**
	 * @var Router $router, The injected router service
	 * @access private
	 */
	private $router;

	/**
	 * return the function name
	 * @return string
	 */
	public function getName()
	{
		return 'giveMeTheUrl';
	}

	/**
	 * Execute the function
	 * @param array $args, The function arguments
	 * @param Parser $parser, The JImport parser
	 * @return string
	 */
	public function execute(array $args, Parser $parser)
	{
		// just return an absolute url
		return '"'.$this->router->generate('my_road', array(), true).'"';
	}

	/**
	 * constructor, it takes the router service
	 * @param Router $router
	 */
	public function __construct($router)
	{
		$this->router = $router;
	}
}

注册函数

在你的 services.yml 中添加以下类型的行

services:
	my_cool.jimport_function:
		class: 'My\CoolBundle\Jimport\GiveMeTheUrlFunction'
		arguments: [ '@router' ] # inject the router
		tags:
			- { name: 'davidjegat_jimport.function' } # Tag the function !

### 现在,让我们开始吧!

进入你的文件,并使用你的函数,例如

function getRoad()
{
	return @giveMeTheUrl();
}

注意!

你不能使用 jimport 来动态访问数据库代码,或与某些数据进行交互,因为,在开发中,你的文件将被正确解析,但是一旦 assetic 被导出,文件只被解析一次!这是不好的!最好使用 AJAX!