Laravel5.0:将值从控制器方法传递到公共文件夹中的 .php 文件
Posted
技术标签:
【中文标题】Laravel5.0:将值从控制器方法传递到公共文件夹中的 .php 文件【英文标题】:Laravel5.0: passing value from a controller method to a .php file in public folder 【发布时间】:2016-08-30 18:22:11 【问题描述】:我想将一个值从我的控制器传递到公共文件夹内的 .php 文件。 这是我的控制器部分
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
public function barChart()
$barChart= DB::table('clients')
->select('clients.ClientName','clients.Price')
->get();
//want to pass this $barChart variable
.php 文件的位置是
/dist/chart/clients.php
我想在clients.php文件中有这个$barChart变量并执行进一步的操作。
更新 1: 这是视图部分
<div class="panel-body" id="barChart">
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
$(document).ready(function()
$.ajax(
//url: "URL::asset('/dist/chart/clients.txt')", //this works, I saved the json_encode($bar) at client.txt file
data: [$bar], //this does not work
dataType:"JSON",
success: function(result)
google.charts.load('current',
'packages':['corechart']
);
google.charts.setOnLoadCallback(function()
drawChart(result);
);
);
function drawChart(result) server.
var data = new google.visualization.DataTable();
data.addColumn('string' , 'ClientName');
data.addColumn('number', 'Price');
var dataArray=[];
$.each(result, function(i, obj)
dataArray.push([obj.ClientName, parseInt(obj.Price)]);
);
data.addRows(dataArray);
var barChart_options =
title: 'hoise??',
is3D: 'true',
width: 400,
height: 300
;
var barChart = new google.visualization.BarChart(document.getElementById('barChart'));
barChart.draw(data, barChart_options);
);
</script>
更新 2
控制器更新
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
public function index()
try
$val=DB::connection()->getDatabaseName();
if(DB::connection()->getDatabaseName())
$barChart= DB::table('clients')
->select('clients.ClientName','clients.Price')
->get();
$bar = json_encode($barChart);
return view('home')
->with('bar', $bar);
else
$er="/connection status: database error";
return view('errors/503')->with('error',$er);
catch (\Exception $e)
$er="/connection status: database error";
return view('errors/503')->with('error',$er);
public function barChart()
$barChart= DB::table('clients')
->select('clients.ClientName','clients.Price')
->get();
echo json_encode($barChart);
public function create()
//
public function store()
//
public function show($id)
//
public function edit($id)
//
public function update($id)
//
public function destroy($id)
//
【问题讨论】:
你为什么不把它发送到视图? 创建一个刀片文件并简单地访问那里的值。 在我看来,我想使用 $barChart 变量 json_encoded。 $.ajax( url: "URL::asset('/dist/chart/clients.php')", dataType:"JSON", 成功: function(result) google.charts.load('当前', '包':['corechart'] ); 请发布您的控制器更新。 @MubasharAbbas 请检查更新 【参考方案1】:将您的clients.php
添加到resources/views
目录并将其命名为clients.blade.php
,它的工作原理相同,但为您提供了一个不错的模板引擎。
在您的 controller/barChart
方法中执行此操作。
$barChart= DB::table('clients')
->select('clients.ClientName','clients.Price')
->get();
return view('clients', compact('barChart'));
在视图文件resources/views/clients.blade.php
中,您现在可以访问$barChart
变量。
您可以像这样在视图中使用它:
json_encode($barChart)
或者如果你不使用刀片,那么
<?= json_encode($barChart) ?>
希望这会有所帮助。
【讨论】:
但是,我不能在 $.ajax(url: ) 中使用 $barChart 作为 url。我问这个问题的原因是我可以在我看来使用 $.ajax(url: ..here... ) 内部的 json_encode($barChart) 的输出。整合谷歌图表让我这样做。如果您知道将 google chart 与 laravel 与 mysql 数据库中的值集成的更好方法,请告诉我。 您需要将其作为 ajax 的数据属性发送对吗? 感谢您的努力,但对我没有用。我更新了我的问题。请看一下。它可能会帮助您清楚地理解我的问题。 在我的回答中我提到将你的 clients.php 文件放在资源/视图中。你这样做了吗?【参考方案2】:把你的clients.php放到resenter code here
ources/views目录并命名为clients.blade.php
像这样改变你的控制器
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
public function barChart()
$barChart=DB::table('clients')
->select('clients.ClientName','clients.Price')- >get();
return view('clients')->with('barChart' => $barChart);
?>
【讨论】:
【参考方案3】:最后我想出了解决方案。我无法将变量传递给公用文件夹,并且在 ajax 中提供 ulr 也是一个问题,在这种情况下创建数据表是显而易见的然后传递它。 控制器部分将是
public function index()
try
$val=DB::connection()->getDatabaseName();
if(DB::connection()->getDatabaseName())
$barChart= DB::table('clients')
->select('clients.ClientName','clients.Price')
->get();
$rows = array();
//flag is not needed
$flag = true;
$table = array();
$table['cols'] = array(
array('label' => 'Weekly Task', 'type' => 'string'),
array('label' => 'Percentage', 'type' => 'number')
);
$rows = array();
foreach($barChart as $r)
$temp = array();
$temp[] = array('v' => (String)$r->ClientName);
$temp[] = array('v' =>(int)$r->Price);
$rows[] = array('c' => $temp);
$table['rows'] = $rows;
$bar = json_encode($table);
return view('home')
->with('bar', $bar);
else
catch (\Exception $e)
视图部分将是
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.load('visualization', '1', 'packages':['corechart']);
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
function drawChart()
// Create our data table out of JSON data loaded from server.
var data = new google.visualization.DataTable(<?=$bar?>);
var options =
title: 'My Chart',
is3D: 'true',
width: 400,
height: 300
;
// Instantiate and draw our chart, passing in some options.
// Do not forget to check your div ID
var chart = new google.visualization.BarChart(document.getElementById('barChart'));
chart.draw(data, options);
</script>
礼貌 php mysql google chart json complete example
【讨论】:
以上是关于Laravel5.0:将值从控制器方法传递到公共文件夹中的 .php 文件的主要内容,如果未能解决你的问题,请参考以下文章