繁体   English   中英

如何将数组从视图传递给控制器​​? 使用 Laravel

[英]How to pass an array from view to controller? Using Laravel

我有几天无法解决的问题。

我应该在我的视图中有一个 javascript/ajax/jQuery 函数,它创建一个数组并使用路由“/modulos/contas_ti/gerar_protocolo”将用户发送到一个新页面

这是我的javascript:

function check() {
    // I don't know how many numbers I will have in my array.
    // It will be dinamic. Can be [1, 2] or [1, 4, 5, 6] or anything else.
    var array = [1, 2];

    // I would like to pass 'array' in the URL below as parameter
    window.location.href = "{{URL::to('/modulos/contas_ti/gerar_protocolo')}}"
}

我的路线:

// Maybe pass the array at the end of 'gerar_protocolo'? 
// Like 'gerar_protocolo[]=' ?

Route::get('/modulos/contas_ti/gerar_protocolo', 'ContasTI\ContasTIController@gerarProtocolo');

我的控制器:

// How to pass the array as parameter inside ()? I also need to 
// pass the array to the new view using 'with', right? 
// Like with->('datas', $data);

public function gerarProtocolo() {
    return view('modulos.contas-ti.gerar_protocolo');
}

您可以将其作为请求参数发送

function check() {
    var array = [1, 2];

    window.location.href = "{{URL::to('/modulos/contas_ti/gerar_protocolo')}}" + "?array[]=1&array[]=2";
}

控制器:

public function gerarProtocolo(Request $request) {
    $data = request('array');
    return view('modulos.contas-ti.gerar_protocolo', compact('data'));
}

更好的方法是,创建一个带有隐藏变量的表单,而不是调用 javascript check() 函数时,将数组值存储在隐藏变量中,然后使用 javascript form.submit() 方法。

function check() { var array = [1, 2, n]; var myArray= encodeURIComponent(JSON.stringify(array)); window.location.href = "{{URL::to('/modulos/contas_ti/gerar_protocolo')}}" + "?array=" + myArray; }

控制器:

public function gerarProtocolo() { $data = request->json()->('array'); return view('modulos.contas-ti.gerar_protocolo', compact('data')); }

您可以使用JSON.stringify()将数组转换为 json:

json_data = JSON.stringify(my_array);

那么你可以将你的 url 形成为: 'example.com/api?json_data='+json_data = 'example.com/api?json_data='+json_data因此在你的控制器中,只需通过调用来检索它:

$data = request()->get('json_data');
$data_array = json_decode($data, true); //converts to array
return view('modulos.contas-ti.gerar_protocolo', compact('data_array'));

在您看来,变量$data_array将可供使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM