将 PHP 变量转换为 JavaScript
你是否经常遇到需要将服务器端的字符串、数组、集合等等数据输出到 JavaScript 的情况?正常情况下,你会觉得这比较麻烦,尤其是随着应用规模的增长。
这个包正是为了解决这个麻烦而诞生的。
安装
通过 Composer 安装包:
{
"require": {
"laracasts/utilities": "~2.0"
}
}
如果你在使用 Laravel 4:请使用
~1.0
代替并且使用那个版本的文档。对于 Laravel 5 (或者非 Laravel)~2.0
即可。
Laravel 用户
如果你是使用 Laravel,可以通过服务提供者自动绑定这个包。
// config/app.php
'providers' => [
'...',
'Laracasts\Utilities\JavaScript\JavaScriptServiceProvider'
];
提供者启动后,你就可以使用 JavaScript
门面了,你可以在控制器中使用。
public function index()
{
JavaScript::put([
'foo' => 'bar',
'user' => User::first(),
'age' => 29
]);
return View::make('hello');
}
在 Laravel 5 中,你需要现在控制器头部引入
use JavaScript;
。
使用了上面的代码之后,你就可以在 JavaScript 中使用这些变量了。
console.log(foo); // bar
console.log(user); // User Obj
console.log(age); // 29
这个包默认情况下会绑定 JavaScript 变量到你引入的 "footer" 视图中,例如:
<body>
<h1>My Page</h1>
@include ('footer') // <-- 变量在这之前插入
</body>
你也可以改变默认输出到其他视图中。如下:
默认
如果使用 Laravel,只有两个配置选项是需要你注意的。一,生成默认配置文件。
php artisan vendor:publish
这步会生成一个新的配置文件:config/javascript.php
。
<?php
return [
/*
|--------------------------------------------------------------------------
| View to Bind JavaScript Vars To
|--------------------------------------------------------------------------
|
| Set this value to the name of the view (or partial) that
| you want to prepend all JavaScript variables to.
|
*/
'bind_js_vars_to_this_view' => 'footer',
/*
|--------------------------------------------------------------------------
| JavaScript Namespace
|--------------------------------------------------------------------------
|
| By default, we'll add variables to the global window object. However,
| it's recommended that you change this to some namespace - anything.
| That way, you can access vars, like "SomeNamespace.someVariable."
|
*/
'js_namespace' => 'window'
];
bind_js_vars_to_this_view
你可以修改这个文件去指定 JavaScript 输出的视图。底部文件是一个很好的选择。
如果你引入了一些类似 layouts/partials/footer
的部件,用于存放页脚代码和引用的脚本,只需要设置 bind_js_vars_to_this_view
等于这个路径即可。Behind the scenes, the Laravel implementation of this package will listen for when that view is composed, and essentially paste the JS variables within it.
js_namespace
默认情况下,所有 JavaScript 变量会注入到全局的 window
对象里。你可能不想这样。修改 js_namespace
选项填入你想使用的 JavaScript 命名空间。如果你修改了这个选项,你需要像下面这样获取 JavaScript 变量:
MyNewNamespace.varName
Symfony2
略
不使用 Laravel
略
网友评论