laracasts / utilities
将 PHP 转换为 JavaScript
Requires
- php: >=5.5.0|>=7.2.5|>=8.0.0
- illuminate/support: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- phpspec/phpspec: >=2.0
README
通常,你会发现自己处于需要将某些服务器端字符串/数组/集合/等等传递到 JavaScript 中的情况。传统上,这可能有点麻烦——尤其是当你的应用程序增长时。
此包极大地简化了此过程。
安装
首先,通过 Composer 安装此包。
composer require laracasts/utilities
如果你使用 Laravel 4:则安装
~1.0
版本的此包(并使用该版本的文档)。对于 Laravel 5(或非 Laravel),~2.0
就足够了!
Laravel 用户
对于 Laravel 用户,你可以使用一个服务提供商来自动注册必要的绑定。
Laravel 5.5+ 用户:这一步可以跳过,因为我们可以自动使用框架注册包。
// 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 中访问 foo
、user
和 age
。
console.log(foo); // bar console.log(user); // User Obj console.log(age); // 29
默认情况下,此包将您的 JavaScript 变量绑定到“页脚”视图,您需要包含该视图。例如
<body>
<h1>My Page</h1>
@include ('footer') // <-- Variables prepended to this view
</body>
当然,您可以将其更改为不同的视图。请参见以下内容。
默认值
如果使用 Laravel,您只需要关注两个配置选项。首先,发布默认配置。
php artisan vendor:publish
// Or...
php artisan vendor:publish --provider="Laracasts\Utilities\JavaScript\JavaScriptServiceProvider"
这将向 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
键设置为该路径。幕后,此包的 Laravel 实现将监听该视图的组成,并在其中粘贴 JS 变量。
js_namespace
默认情况下,所有 JavaScript 变量都将嵌套在全局 window
对象下。你可能想改变这一点。更新 js_namespace
键以包含你想要的 JavaScript 命名空间名称。它可以是任何名称。只需记住:如果您更改此设置(您应该这样做),那么您将像这样访问所有 JavaScript 变量
MyNewNamespace.varName
注意
在更改视图路径后,运行此 artisan 命令。
php artisan config:clear
Symfony2
要在 Symfony2 应用程序中使用此组件,您可以尝试 此捆绑包,它是基于 PHP-Vars-To-Js-Transformer 构建的。
非 Laravel
如果您不使用 Laravel,那么您需要自己手动设置这些(或者,您可以提交一个 pull request,其中包含您所需框架的实现。)
首先,创建 Laracasts\Utilities\JavaScript\ViewBinder
接口的实现。此类负责将给定的 JavaScript 插入到您的视图/页面中。
<?php class MyAppViewBinder implements Laracasts\Utilities\JavaScript\ViewBinder { // $js will contain your JS-formatted variable initializations public function bind($js) { // Do what you need to do to add this JavaScript to // the appropriate place in your app. } }
然后,将所有这些放在一起
use Laracasts\Utilities\JavaScript\Transformers\Transformer; $binder = new MyAppViewBinder; $javascript = new Transformer($binder, 'window'); // change window to your desired namespace $javascript->put(['foo' => 'bar']);
现在,您可以从 JavaScript 中访问 window.foo
。
记住,这只有在您不使用Laravel时才是必要的。如果您使用Laravel,那么只需引用服务提供商,如上所示。