首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将PHP变量传递给刀片模板中的JavaScript

将PHP变量传递给刀片模板中的JavaScript
EN

Stack Overflow用户
提问于 2015-05-06 18:27:08
回答 5查看 176.4K关注 0票数 53

JavaScript有没有办法在Laravel Blade模板中从控制器中获取变量?

示例:我有以下代码:

代码语言:javascript
复制
$langs = Language::all();
return View::make('NAATIMockTest.Admin.Language.index',compact('langs'));

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

这是我在控制器中的create函数:

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

这是我的观点:

代码语言:javascript
复制
@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

配置文件夹中的my javascript.php:

代码语言:javascript
复制
<?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进行搜索。这就是为什么我想把这个变量从控制器传递给JavaScript。此外,我在LanguageController中有一个名为initLang的函数,用于检查数据库中是否存在任何语言,它不会显示在create the view的下拉列表中。

EN

回答 5

Stack Overflow用户

发布于 2015-07-03 15:32:08

对我来说,一个有效的例子。

控制器:

代码语言:javascript
复制
public function tableView()
{
    $sites = Site::all();
    return view('main.table', compact('sites'));
}

查看:

代码语言:javascript
复制
<script>    
    var sites = {!! json_encode($sites->toArray()) !!};
</script>

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

代码语言:javascript
复制
<script>    
    var sites = {!! json_encode($sites->toArray(), JSON_HEX_TAG) !!};
</script>
票数 107
EN

Stack Overflow用户

发布于 2015-05-06 22:43:26

代码语言:javascript
复制
$langs = Language::all()->toArray();
return View::make('NAATIMockTest.Admin.Language.index', [
    'langs' => $langs
]);

然后在视图中

代码语言:javascript
复制
<script type="text/javascript">
    var langs = {{json_encode($langs)}};
    console.log(langs);
</script>

虽然不是很好

票数 5
EN

Stack Overflow用户

发布于 2017-10-18 16:08:59

试试这个- https://github.com/laracasts/PHP-Vars-To-Js-Transformer是将PHP变量附加到Javascript的简单方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30074107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档