laracasts/utilities

将 PHP 转换为 JavaScript

3.2.3 2024-03-03 16:53 UTC

This package is auto-updated.

Last update: 2024-09-03 17:49:09 UTC


README

Build Status

通常,你会发现自己处于需要将某些服务器端字符串/数组/集合/等等传递到 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 中访问 foouserage

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,那么只需引用服务提供商,如上所示。

许可证

查看此仓库的许可证