如何将变量从一个控制器传递到laravel中的另一个控制器

时间:2016-10-08 10:23:26

标签: php laravel-5

我有一个名为index.blade.php的视图,它显示了有关供应商的信息,该供应商通过控制器传递,例如VendorController,在这个视图中我有一个按钮“查看地址”,现在我想在按钮点击时显示该供应商的数据。我还有另一个控制器,即VendorAddressController,它从db中获取供应商的地址。 index.blade.php文件的代码:

<td>
   <a href="{!! $vendor->slug !!}/vendor-address/" class="btn btn-primary">View Address</a>
</td>
VendorAddressContoller中的

public function index($id)
{        
    $vendor = Vendors::find($id);
    $vendorsaddress = VendorAddress::where('vendor_id', $vendor->id)->paginate(15);
    return view('admin.vendoraddress.index',['vendorsaddress'=>$vendorsaddress, 'vendor'=>$vendor, 'address'=>$address]);
}

但是当我点击按钮时,什么都没有出现

2 个答案:

答案 0 :(得分:4)

有多种方法可以做到这一点。您可以根据自己的要求选择多种选择。

1。 By Session

您可以在第一个控制器中执行此操作

Session::put('key', 'value');

然后在第二个

Session::get('key');

2。 By Cookies 你的第一个控制器:

$response = Response::make('Hello World');

return  $response->withCookie(Cookie::make('name', 'value', $minutes));

并在下一个请求中获取

$value = Cookie::get('name');

您可以从here找到更多信息。

答案 1 :(得分:0)

你应该记住两件事:

  1. 您不会将数据从一个控制器调用到另一个控制器。
  2. 您不需要为一个实体的每件事创建不同的控制器。要非常清楚,如果要将作业划分为使控制器小型使用类,模型和存储库(用于数据库交互)并且可能是帮助程序,那么有关供应商的所有流程都应该进入一个VendorController。
  3. 因此,回到您的问题,您希望在按钮单击(动态)时显示该供应商的数据。然后你应该使用jquery,我正在添加相同的小代码片段:

    在route.php(适用于Laravel 5.2及更早版本)或web.php(适用于Laravel 5.3)中创建新路径

    Route::get('vendor-address/{id}', 'VendorController@getAddress');
    

    创建一个js文件,让我们将其命名为custom.js并将其放在您的公共或资源文件夹中,暂时将其保存在公共场所。内容相同:

    $('#show-address').click(function()
    {
       //get the id of the vendor we want to fetch address of
       var vendor_id = $(this).data('id');
       //send a get request to our controller to get the data
       $.get('/vendor-address/'+vendor_id, function(data)
       {
            //store the json data we got from the controller into a variable
            var parsed = JSON.parse(data);
            //remove all the content of this vendors address div so that the address doesn't repeats
            $('.vendor_address_'+vendor_id).empty();
            //append the address in this div
            $('.vendor_address_'+vendor_id).append(parsed);
       });
    })
    

    现在你认为应该有:

    <button class="btn btn-success" data-id="{{$vendor->id}}">Show address</button>
    
    //and a empty div, our address will be appended here
    <div class="vendor_address_{{$vendor->id}}"></div>
    

    现在在您的控制器中:

    public function getAddress($id)
    {
       $address = Vendor::where('id', $id)->first();
       return json_encode($address->address);
    }
    

    请根据您的要求修改几个字段