【问题标题】:Retrieving get parameters from URL in Laravel从 Laravel 中的 URL 检索获取参数
【发布时间】:2016-09-02 16:47:32
【问题描述】:

我创建了一个 URL 字符串:

http://SERVER/v1/responders?latitude=48.25969809999999&longitude=11.43467940000005

一条路线:

Route::get('/responders', 'Responders\APIResponderController@index');

和一个控制器:

public function index(Request $request) {

    // Get Latitude and Longitude from request url
    $latitude = $request["latitude"];
    $longitude = $request["longitude"];

    $responders = new Responder();

    if(!isset($latitude) & !isset($longitude)) {
    }

但结果不是我所期望的。控制器不解析 URL 字符串中的参数。我是否以错误的方式解析它们?

我尝试使用 dd($request->all()); 转储我的输入,但输出为 NULL。由于 URL 发送正确,我想知道数据在哪里丢失。我的路由文件不正确吗?

更新 会不会是我的 nginx 配置??

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/mfserver/public;
    index index.php index.html index.htm;

    charset utf-8;

    server_name SERVER;

    location / {
        try_files $uri $uri/ /index.php?query_string;
    }

    error_page 404 /index.php;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/mfserver/public;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }
}

【问题讨论】:

  • 你能做一个dd($request->all()) 并显示结果吗?
  • 结果是:array:1 [▼ "query_string" => "" ]
  • 这很奇怪,因为我肯定有上面提到的应该给出参数的 URL
  • 抱歉,在您的 nginx 配置中没有找到任何内容。是的,我要求您在没有 $ 的情况下将 dd(request()->get('latitude')) request 作为辅助函数运行。

标签: php laravel


【解决方案1】:

您的 nginx 配置中有错字。在您的location 定义中,您的query_string 变量缺少前导$。因此,您的原始查询字符串将使用query_string 的纯文本重写。这就是您转储请求数据时显示array:1 [▼ "query_string" => "" ] 的原因。

将您的配置更新为:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

【讨论】:

    【解决方案2】:

    试试这个:

    $inputs = $request->all();

    然后:

    $latitude = $inputs['latitude']

    $longitude = $inputs['longitude']

    【讨论】:

    • 当我var_dump 我得到的输入:array(1) { ["query_string"]=> string(0)}
    • 好吧,试试这个 dd(request()->all() 告诉我你得到了什么
    • 结果是:array:1 [▼ "query_string" => "" ]
    • 奇怪的O.o认真
    • 是的......这就是我的想法:我在浏览器和邮递员中尝试过。两者结果相同
    【解决方案3】:

    这应该可行,请根据您的需要进行调整。

    public function index(Request $request) {
        if(!$request->has('latitude') || !$request->has('longitude')) {
            // code if one or both fields are missing
        }
    
        // Get Latitude and Longitude from request url
        $latitude = (float)$request->input('latitude') ;
        $longitude = (float)$request->input('longitude');
    
        // other code here
    

    }

    【讨论】:

    • 当我这样做时:$latitude = (float)$request->input('latitude'); 结果为空
    【解决方案4】:

    最常见的方法是

    $latitude = $request->input("latitude");
    

    【讨论】:

    • 这很奇怪......输出为NULL
    • 您确定发送了纬度吗?您可以像这样查看当前请求的所有属性:dd($request->all());
    • 有趣.. 它是空的!但是我的 URL 字符串包含它 http://SERVER/v1/responders?latitude=48.25969809999999&longitude=11.43467940000005 我需要更改我的路由文件吗?
    猜你喜欢
    • 2021-07-16
    • 2020-06-10
    • 2020-09-12
    • 2016-12-09
    • 2011-07-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多