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 hereources/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 文件的主要内容,如果未能解决你的问题,请参考以下文章

Ruby如何将值从单选按钮传递到控制器方法

将值从视图传递到控制器,我错过了啥?

如何将值从一个JFrame传递到另一个JFrame?

如何将值从 tableview 传递到 collectionview

将值从表视图控制器传递到视图控制器

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图