DavidJegat / jimport-bundle
一个简单的 assetic 文件解析器,便于轻松导入 JavaScript 文件。
Requires
- php: >=5.3.2
- kriswallsmith/assetic: v1.1.0-alpha4
- symfony/assetic-bundle: 2.1.*
- symfony/framework-bundle: >=2.1,<2.3-dev
- twig/extensions: 1.0.*
- twig/twig: 1.12.*
This package is not auto-updated.
Last update: 2024-09-14 13:30:23 UTC
README
一个允许你轻松导入客户端 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 install
或 composer.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!