Laravel 4 - 如何将输入值设置为路径

时间:2014-12-18 14:57:07

标签: php laravel routes

我想通过Blade在Laravel 4中实现一个文本输入字段。

{{ Form::open(array("route" => "search.show")) }}
    {{ Form::text("name") }}
{{ Form::close() }}

文本输入将一个字符串发布到我的控制器,用于通过

从我的数据库中选择一些数据
class SearchController extends \BaseController {
    public function show($name) {
        return(Item::where("name", "like", "%" . $name . "%")->get());
    }
}

当我提交带有文字输入的表格时,我想点击我用

实施的search.show路线
Route::resource("search", "SearchController");

现在我想知道如何将文本发布到我的routes.php,我的控制器能够通过show方法的参数获取输入?

我知道我可以通过Input::get("name")输入数据,但是当Router::resource为我提供模板时,这不是设计失败吗?

抱歉我的英语不好,但我希望你们能帮助我。 谢谢。

3 个答案:

答案 0 :(得分:0)

您可以注入一个Request对象来显示控制器的方法。

class SearchController extends \BaseController {
    public function show(Request $request) {
        $name = $request->input("name");
    }
}

或者您可以进行表单模型绑定:http://scotch.io/quick-tips/php-tips/laravel-php/laravel-form-model-binding

在Laravel 4.x上,您必须使用输入外观

class SearchController extends \BaseController {
        public function show(Request $request) {
            $name = Input::get("name");
        }
    }

答案 1 :(得分:0)

如果您使用表单更好地不使用像show($id)函数这样的哈希变量的函数,因为url应该像.../search/show/{$id}一样,请尝试使用store()函数。

public function store()
{
    $name = Input::get("name");
    /* your code */
}

==

{{ Form::open(array('route' => "search.store")) }}
    {{ Form::text("name") }}
{{ Form::close() }}

答案 2 :(得分:0)

资源控制器布局没有回答您的具体需求。一般来说,搜索会在关键字之外有许多不同的方面,但并非总是如此。

我能为您提供的最佳方法是避免使用任何预先存在的资源控制器路由,因为您可能需要它们以用于将来实际用途。

您可以在声明路径时向资源控制器添加搜索方法。

Route::get('search', [
    'uses' => 'SearchController@search',
    'as' => 'search'
]);

Route::resource('SearchController');

但是,由于资源控制器不是一个很好的解决方案。使用常规控制器。只需删除routes.php中的资源控制器调用,只实现搜索方法。

public function search()
{
    // Your code here
}

这样做的好处是你可以完全控制路由的命名,使用的HTTP动词(GET对于搜索更有意义)并且你不会污染资源控制器模板化的路由,其功能不是'属于。

第二部分是如何传递变量。使用在url中作为分隔参数传入的参数来搜索通常很困难。使用GET请求只需使用查询字符串。

http://myapp.com/search?keyword=search%20%keyword

现在只需使用Input facade或dependency将Request类注入控制器。

$keyword = Input::get('keyword');