使用长参数(数组)在Laravel中构造和接受GET请求的正确方法

时间:2015-10-29 12:34:56

标签: php laravel

我是Laravel的新手。我不知道构建和接受GET请求的正确方法。

我需要发送以下请求(enes是语言代码):

translation/next-word/en/es

在控制器中我有

public function getNextWord($langfrom, $langto) {

然而,现在新的要求来了,我还必须发送一个ID列表(在我的客户端,它是一个数组(例如,[1,5,12,15]),但它可能是长列表(约100个ID)因此,我不知道如何将此ID数组发送到控制器,并在控制器方法中接受它。

我的旧客户端请求(没有类别):     // var categories = [1,2,5,6,17,20];

var url = "translation/next-word/en/es";
        $.ajax({
            url: url,
            method: "GET"                
        }).success(function(data){
            ...
        });

2 个答案:

答案 0 :(得分:0)

对于get,请更改您的控制器,

public function getNextWord() {
    $langfrom = $_GET['langfrom'];
    $langto = $_GET['langto'];
}

在ajax中发送这样的数据,

$.ajax({
        url: url,
        method: "GET"  ,
        data: {langfrom:langfrom,langto:langto}   <----- passing from GET     
    }).success(function(data){
        ...
    });

如果你想进入这样的参数,

public function getNextWord($langfrom, $langto) {

然后ajax应该是这样的,

$.ajax({
        url: url +"/" + langfrom + "/" langto,  <----- passing as parameter
        method: "GET"  ,            
    }).success(function(data){
        ...
    });

答案 1 :(得分:0)

在Laravel中,您通过在routes.php文件中创建路由然后在控制器类中的相应方法来实际处理请求来处理GET请求。在您的情况下,因为您还希望传入未知数量的ID,我建议将其作为查询参数。您可以根据需要格式化,但我建议使用逗号之类的东西来划分URL中的数据。所以最后,你的URL看起来像这样:

example.com/translation/next-word/en/es?categories=1,2,5,6,17,20

路由

Route::get('translation/{nextWord}/{from}/{to}', 'TranslationController@translate');

TranslationController

public method translate($nextWord, $from, $to, Request $request)
{
    //get the categories passed in as a query parameter
    $input = $request->all();
    $categories = $input['categories'];
    $categories = explode(',',$categories); //turn string into array

    //actually translate the words here (or whatever you need to do)
    $translated = magicTranslateFunction($nextWord, $from, $to);

    //also you can now use the categories however you need to

    //once you're done doing everything return data
    return $translated;
}

在您的javascript中,您只想将您的类别数组转换为逗号分隔的字符串,然后将其传递给我开始发布帖子的网址。

var categories = [1,2,5,6,17,20];
var categoriesString = categories.join();
var url = "translation/next-word/en/es?categories="+categoriesString;

    $.ajax({
        url: url,
        method: "GET",               
        success: function(data) {
            ...
        }
    });

编辑 - 使用$ .ajax&#39;数据&#39;设置

您可以直接将数组作为“数据”的一部分传入,而不是将类别作为字符串附加到网址中。设置你的ajax电话。

var categories = [1,2,5,6,17,20];
var url = "translation/next-word/en/es";

    $.ajax({
        url: url,
        method: "GET",
        data: {
           "categories": categories
        },
        success: function(data) {
            ...
        }
    });

Laravel实际上会将其正确转换为PHP数组,因此您不需要在控制器中进行任何特殊的解析。只需正常使用它并使用它:

TranslationController

public method translate($nextWord, $from, $to, Request $request)
{
    //get the categories passed in as a query parameter
    $input = $request->all();
    $categories = $input['categories']; //already a PHP array

    //actually translate the words here (or whatever you need to do)
    $translated = magicTranslateFunction($nextWord, $from, $to);

    //also you can now use the categories however you need to

    //once you're done doing everything return data
    return $translated;
}