如何使用GET方法将GET参数传递给Laravel?

Ili*_*mza 27 php forms laravel

我坚持这个非常基本的形式,我无法完成,我想建立一个带有文本输入的搜索表单,以及两个选择控件,一个接受3个参数的路由,当我提交时的问题表单,它用问号映射参数,而不是Laravel方式,

标记

{{ Form::open(['route' => 'search', 'method' => 'GET'])}}
    <input type="text" name="term"/>
    <select name="category" id="">
        <option value="auto">Auto</option>
        <option value="moto">Moto</option>
    </select>
    {{ Form::submit('Send') }}
{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)

路线

    Route::get('/search/{category}/{term}', ['as' => 'search', 'uses' => 'SearchController@search']);
Run Code Online (Sandbox Code Playgroud)

当我提交表单时,它会将我重定向到

search/%7Bcategory%7D/%7Bterm%7D?term=asdasd&category=auto
Run Code Online (Sandbox Code Playgroud)

我如何通过Laravel方式将这些参数传递给我的路线,并且没有Javascript!:d

mst*_*rdy 36

最简单的方法是接受传入的请求,并在Controller中提取所需的变量:

Route::get('search', ['as' => 'search', 'uses' => 'SearchController@search']);
Run Code Online (Sandbox Code Playgroud)

然后在SearchController@search:

class SearchController extends BaseController {

    public function search()
    {
        $category = Input::get('category', 'default category');
        $term = Input::get('term', false);

        // do things with them...
    }
}
Run Code Online (Sandbox Code Playgroud)

有用的是,您可以设置默认值,Input::get()以防万一没有传递给您的Controller的操作.

正如joe_archer所说,没有必要将这些术语放入URL中,并且它可能更好作为POST(在这种情况下,您应该更新您的呼叫Form::open()以及您在routes.php中的搜索路径 - Input::get()保持不变)


bir*_*chy 19

我也在努力解决这个问题,终于让它发挥作用了.

routes.php文件

Route::get('people', 'PeopleController@index');
Route::get('people/{lastName}', 'PeopleController@show');
Route::get('people/{lastName}/{firstName}', 'PeopleController@show');
Route::post('people', 'PeopleController@processForm');
Run Code Online (Sandbox Code Playgroud)

PeopleController.php

namespace App\Http\Controllers ;
use DB ;
use Illuminate\Http\Request ;
use App\Http\Requests ;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;

    public function processForm() {
        $lastName  = Input::get('lastName') ;
        $firstName = Input::get('firstName') ;
        return Redirect::to('people/'.$lastName.'/'.$firstName) ;
    }
    public function show($lastName,$firstName) {
        $qry = 'SELECT * FROM tableFoo WHERE LastName LIKE "'.$lastName.'" AND GivenNames LIKE "'.$firstName.'%" ' ;
        $ppl = DB::select($qry);
        return view('people.show', ['ppl' => $ppl] ) ;
    }
Run Code Online (Sandbox Code Playgroud)

人/ show.blade.php

<form method="post" action="/people">
    <input type="text" name="firstName" placeholder="First name">
    <input type="text" name="lastName" placeholder="Last name">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="submit" value="Search">
</form>
Run Code Online (Sandbox Code Playgroud)

注意:
我需要将两个输入字段传递给URI.
我还没有使用Eloquent,如果你是的话,相应地调整数据库逻辑.
我没有完成保护用户输入的数据,所以冷静.
注意"_token"隐藏表单字段和所有"使用"包含,它们是必需的.

PS:这是另一种似乎有效的语法,并不需要

use Illuminate\Support\Facades\Input;
Run Code Online (Sandbox Code Playgroud)

.

public function processForm(Request $request) {
    $lastName  = addslashes($request->lastName) ;
    $firstName = addslashes($request->firstName) ;
    //add more logic to validate and secure user entered data before turning it loose in a query
    return Redirect::to('people/'.$lastName.'/'.$firstName) ;
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个陈旧的答案,但你不应该这样做,即使你不想遵循MVC架构,你应该总是使用Eloquent进行数据库查询. (6认同)

Fab*_*n M 7

我有同样的问题.我需要显示搜索引擎的网址

我使用这样的两条路线

Route::get('buscar/{nom}', 'FrontController@buscarPrd');

Route::post('buscar', function(){

   $bsqd = Input::get('nom');    

   return Redirect::action('FrontController@buscarPrd', array('nom'=>$bsqd));

});
Run Code Online (Sandbox Code Playgroud)

第一个用于显示我们想要的网址

第二个由表单使用并重定向到第一个


Joe*_*Joe 6

因此,您正在尝试将搜索词和类别放入 URL 中?

我建议不要这样做,因为您将不得不处理多词搜索词等,并且最终可能会因不允许使用的字符而导致各种不愉快。

我建议发布数据,对其进行消毒,然后返回结果页面。

Laravel 路由并不是为了接受来自表单的 GET 请求,它被设计为使用 URL 段作为获取参数,并围绕这个想法构建。


Jon*_*han 5

msturdy解决方案的替代方法是使用您可以使用的请求帮助器方法

这以完全相同的方式工作,而无需在控制器顶部导入Input名称空间use Illuminate\Support\Facades\Input

例如:

class SearchController extends BaseController {

    public function search()
    {
        $category = request('category', 'default');
        $term = request('term'); // no default defined

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)