javascript - 在 Blade 模板中将 PHP 变量传递给 JavaScript

标签 javascript laravel laravel-blade

JavaScript 有什么方法可以从 Laravel Blade 模板中的 Controller 获取变量吗?

示例: 我有以下代码:

$langs = Language::all();
return View::make('NAATIMockTest.Admin.Language.index',compact('langs'));

我可以获取 $langs 并将其传递给 JavaScript 吗?我已经用过PHP-Vars-To-Js-Transformer 。但是当我将 JavaScript::put() 用于 Controller 中的两个函数时。它不起作用。有什么帮助吗?

这是我在 Controller 中的创建函数:

public function create()
{
    $names = $this->initLang();
    Javascript::put([
        'langs' => $names
    ]);
    
    return View::make('NAATIMockTest.Admin.Language.create',compact('names'));
}

这是我的观点:

@extends('AdLayout')
@section('content')
<script type="text/javascript">
    var app = angular.module('myApp', []);
    app.controller('langCtrl', function($scope) {
        $scope.languages = langs;
    });
</script>
    
<div class="container-fluid" ng-app="myApp" ng-controller="langCtrl">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h2>Create language</h2>
                </div>
                    
                <div class="panel-body">
                    {!! Form::open() !!}
                        <p class="text-center">
                            {!! Form::label('Name','Language: ') !!}
                            <input type="text" name="searchLanguage" ng-model="searchLanguage">
                        </p>
    
                        <select name="Name[]" multiple size="10" ng-model="lang" ng-click="show()">
                            <option value="@{{v}}" ng-repeat="(k,v) in languages | filter:searchLanguage">
                                @{{v}}
                            </option>
                        </select><br>
    
                        <div class="text-center">
                            {!! Form::submit('Create',['class'=>'btn btn-primary']) !!}&nbsp;
                            {!!   Html::linkAction('NAATIMockTest\LanguageController@index', 'Back', null, array('class' => 'btn btn-primary')) !!}
                        </div>
                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

我的 javascript.php 在配置文件夹中:

<?php
return [
    'bind_js_vars_to_this_view' => 'footer',
    'bind_js_vars_to_this_view' => 'NAATIMockTest.Admin.Language.create',
    'bind_js_vars_to_this_view' => 'NAATIMockTest.Admin.Language.edit',
    
    'js_namespace' => 'window',
];

这个想法是: 我在 MySQL 中有一种表语言。我想显示具有多个属性可供选择的下拉列表,并且我也想使用 angularjs 进行搜索。这就是为什么我想将变量从 Controller 传递到 JavaScript。此外,我在 LanguageController 中有一个名为 initLang 的函数来检查数据库中是否存在任何语言,它不会显示在创建 View 的下拉列表中。

最佳答案

对我来说有一个工作示例。

Controller :

public function tableView()
{
    $sites = Site::all();
    return view('main.table', compact('sites'));
}

查看:

<script>    
    var sites = {!! json_encode($sites->toArray()) !!};
</script>

为了防止恶意/意外行为,您可以按照 Jon 在链接到此 SO answer 的评论中的建议使用 JSON_HEX_TAG

<script>    
    var sites = {!! json_encode($sites->toArray(), JSON_HEX_TAG) !!};
</script>

关于javascript - 在 Blade 模板中将 PHP 变量传递给 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30074107/

相关文章:

laravel - 查询未正确执行

php - Laravel Eloquent - 过滤器关系

javascript - 先进的 D3 转换测序;继承不同选择的转换延迟/持续时间

javascript - 如何将 setInterval 定位到特定的 html 标记

javascript - 如何使 js 函数通用以在我的表单上的任何地方工作? (干燥)

laravel - 对一个策略使用多个 Auth 保护

php - 计算具有特定类别和标签的帖子 laravel

forms - Laravel 表单 : Input Button Not Showing HTML Icon

javascript - 使用动态 PHP 变量绘制流程图绘图点

javascript - 使用 jquery 隐藏另一个父级的子级