得到GET“?” laravel变量

时间:2013-02-26 03:57:50

标签: php api rest laravel

您好我在this文章之后使用REST和Laravel创建API。

一切都按预期运作良好。

现在,我想使用“?”将GET请求映射到识别变量。

例如:domain/api/v1/todos?start=1&limit=2

以下是我的routes.php的内容:

Route::any('api/v1/todos/(:num?)', array(
    'as'   => 'api.todos',
    'uses' => 'api.todos@index'
));

my controllers / api / todos.php:

class Api_Todos_Controller extends Base_Controller {

    public $restful = true;

    public function get_index($id = null) {
        if(is_null($id)) {
            return Response::eloquent(Todo::all(1));

        } else {
            $todo = Todo::find($id);
            if (is_null($todo)) {
                return Response::json('Todo not found', 404);
            } else {
                return Response::eloquent($todo);   
            }
        }
    }
}

如何使用“?”识别get参数?

8 个答案:

答案 0 :(得分:64)

查看$_GET$_REQUEST超全球。以下内容适用于您的示例:

$start = $_GET['start'];
$limit = $_GET['limit'];

修改

根据this post in the laravel forums,您需要使用Input::get(),例如

$start = Input::get('start');
$limit = Input::get('limit');

另请参阅:http://laravel.com/docs/input#input

答案 1 :(得分:18)

非常简单 - 也适用于 POST 请求。我还没有在其他Laravel版本上进行过测试,但在5.3-5.7版本中,您引用了查询参数,就像它是Request class的成员一样。

1。网址

http://example.com/path?page=2

2。在使用魔术方法Request :: __ get()

的路由回调或控制器操作中
Route::get('/path', function(Request $request){
 dd($request->page);
}); 
//NOTE: Laravel automatically injects the request instance
//output
"2"

3。默认值

我们还可以传入一个默认值,如果参数不存在则返回该默认值。它比三元表达更清洁

   //wrong way to do it in Laravel
   $page = isset($_POST['page']) ? $_POST['page'] : 1; 

   //do this instead
   $request->get('page', 1);

   //returns page 1 if there is no page
   //NOTE: This behaves like $_REQUEST array. It looks in both the
   //request body and the query string
   $request->input('page', 1);

4。使用请求功能

$page = request('page', 1);
//returns page 1 if there is no page parameter in the query  string
//it is the equivalent of
$page = 1; 
if(!empty($_GET['page'])
   $page = $_GET['page'];

默认参数是可选的,因此可以省略它

5。使用Request :: query()

  

虽然input方法从整个请求有效负载(包括查询字符串)中检索值,但查询方法只会从查询字符串中检索值

//this is the equivalent of retrieving the parameter
//from the $_GET global array
$page = $request->query('page');

//with a default
$page = $request->query('page', 1);

6。使用请求facade

$page = Request::get('page');

//with a default value
$page = Request::get('page', 1);

您可以在官方文档https://laravel.com/docs/5.8/requests

中阅读更多内容

答案 2 :(得分:5)

我们现在有类似的情况,截至此答案,我正在使用laravel 5.6发布。

我不会在问题中使用你的例子而是我的,因为它虽然相关。

我有这样的路线:

Route::name('your.name.here')->get('/your/uri', 'YourController@someMethod');

然后在您的控制器方法中,确保包括

use Illuminate\Http\Request;

这应该在你的控制器之上,如果是使用php artisan生成的,很可能是默认值,现在要从url获取变量,它应该是这样的:

  public function someMethod(Request $request)
  {
    $foo = $request->input("start");
    $bar = $request->input("limit");

    // some codes here
  }

无论HTTP动词如何, input()方法都可用于检索用户输入。

https://laravel.com/docs/5.6/requests#retrieving-input

希望得到这个帮助。

答案 3 :(得分:3)

查询参数的使用方式如下:

use Illuminate\Http\Request;

class MyController extends BaseController{

    public function index(Request $request){
         $param = $request->query('param');
    }

答案 4 :(得分:3)

这是最好的做法。这样你就可以得到变量 GET方法以及POST方法

    public function index(Request $request) {
            $data=$request->all();
            dd($data);
    }
//OR if you want few of them then
    public function index(Request $request) {
            $data=$request->only('id','name','etc');
            dd($data);
    }
//OR if you want all except few then
    public function index(Request $request) {
            $data=$request->except('__token');
            dd($data);
    }

答案 5 :(得分:2)

在laravel 5.3 $start = Input::get('start');返回NULL

解决这个问题

use Illuminate\Support\Facades\Input;

//then inside you controller function  use

$input = Input::all(); // $input will have all your variables,  

$start = $input['start'];
$limit = $input['limit'];

答案 6 :(得分:0)

使用$_GET之类的本地php资源并不是很好,因为Laravel为我们提供了获取变量的简便方法。作为标准,尽可能使用laravel本身的资源来代替纯PHP。

Laravel中至少有两种通过GET获取变量的模式( Laravel 5.x或更高版本):

模式1

路线:

Route::get('computers={id}', 'ComputersController@index');

请求(POSTMAN或客户端...):

http://localhost/api/computers=500

Controler-您可以通过以下方式访问Controlller中的{id}参数:

public function index(Request $request, $id){
   return $id;
}

模式2

路线:

Route::get('computers', 'ComputersController@index');

请求(POSTMAN或客户端...):

http://localhost/api/computers?id=500

Controler-您可以通过以下方式访问Controlller中的?id参数:

public function index(Request $request){
   return $request->input('id');
}

答案 7 :(得分:-1)

在laravel 5.3中

我想在我的视图中显示获取参数

第1步:我的路线

Route::get('my_route/{myvalue}', 'myController@myfunction');

步骤2:在控制器内编写一个功能

public function myfunction($myvalue)
{
    return view('get')->with('myvalue', $myvalue);
}

现在您返回传递给视图的参数

第3步:在我的视图中显示

在我的视图中,您可以使用

简单地回显它
{{ $myvalue }}

所以如果你的网址中有这个

http://127.0.0.1/yourproject/refral/this@that.com

然后它会在你查看文件中打印this@that.com

希望这有助于某人。