is there any ways that JavaScript can get the variable from the controller in a Laravel Blade template?
Example: I have the code below:
$langs = Language::all(); return View::make('NAATIMockTest.Admin.Language.index',compact('langs'));
Can I get $langs
and pass it to JavaScript? I already used PHP-Vars-To-Js-Transformer. But when I use JavaScript::put()
for two functions in the controller. It didn't work. Any help?
This is my create function in the controller:
public function create() { $names = $this->initLang(); Javascript::put([ 'langs' => $names ]); return View::make('NAATIMockTest.Admin.Language.create',compact('names')); }
this is my view:
@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']) !!} {!! Html::linkAction('NAATIMockTest\LanguageController@index', 'Back', null, array('class' => 'btn btn-primary')) !!} </div> {!! Form::close() !!} </div> </div> </div> </div> </div> @endsection
my javascript.php in config folder:
<?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', ];
The idea is: I have a table language in MySQL. I want to show the dropdown list with multiple attributes to choose, and I also want to search with angularjs as well. That's why I want to pass the variable from the controller to JavaScript. Additionally, I have the function inside LanguageController called initLang to check if any language is exist inside the database, it isn't displayed inside the dropdown list in create the view.
We can pass data from PHP to JavaScript in two ways depending on the situation. First, we can pass the data using the simple assignment operator if we want to perform the operation on the same page. Else we can pass data from PHP to JavaScript using Cookies. Cookie work in client-side.
To do that, you can simply use echo() function into Javascript variable value. If the PHP data is array or object, first you need to convert it to Json object using json_encode() function. Then you can easily manage Json object in Javascript. This way, you can pass data from server-side to client-side and manage.
1) First add a cookie jquery plugin. 2) Then store that window width in a cookie variable. 3) Access your cookie in PHP like $_COOKIE['variable name'].
Unlike some PHP templating engines, Blade does not restrict you from using plain PHP code in your templates. In fact, all Blade templates are compiled into plain PHP code and cached until they are modified, meaning Blade adds essentially zero overhead to your application.
One working example for me.
Controller:
public function tableView() { $sites = Site::all(); return view('main.table', compact('sites')); }
View:
<script> var sites = {!! json_encode($sites->toArray()) !!}; </script>
To prevent malicious / unintended behaviour, you can use JSON_HEX_TAG
as suggested by Jon in the comment that links to this SO answer
<script> var sites = {!! json_encode($sites->toArray(), JSON_HEX_TAG) !!}; </script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With