Laravel表单包含输入操作属性

时间:2016-09-23 10:10:39

标签: php forms laravel laravel-5

LARAVEL 5.0 PHP 5.4.45

我的路线形状如下:

/app/Http/routes.php

Route::get('/clients/search/{id}', 'ClientController@searchById')->where('id', '[0-9]+');
Route::get('/clients/search/{text}', 'ClientController@searchByText')->where('text', '[a-zA-Z]');

我不会在这里打印我的视图,但它只是搜索确切的客户端(案例ID)或前10个客户端(案例文本)。

然后我想创建一个搜索表单。我创建了路线:

/app/Http/routes.php

// Route::get('/clients/search/{id}', 'ClientController@searchById')->where('id', '[0-9]+');
// Route::get('/clients/search/{text}', 'ClientController@searchByText')->where('text', '[a-zA-Z]');
Route::get( '/clients/search', 'ClientController@search');

此路线的控制器:

/app/Http/Controllers/ClientController.php

<?php    

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;

class ClientController extends Controller {
    // Controllers for the 'searchById' and 'searchByText'

    public function search() {
        return view('client.search.search', [
            'title'     =>  'Client search form',
            'title_sub' =>  ''
        ]); 
    }
}

此搜索表单的视图:

/ressources/view/client/search/search.blade.php

<form action="/clients/search/INPUT HERE ?" method="get">
    <div class="input-group">
        <input id="newpassword" class="form-control" type="text" name="password" placeholder="Id de client, nom, prénom, ...">              
        <span class="input-group-btn">
            <button id="button_search" class="btn green-haze" type="submit"><i class="fa fa-search fa-fw"></i></button>
        </span>
    </div>
</form>

问题

在提交之前,如何将输入作为我的表单的action属性的一部分传递?关键是能够发起这样的请求:

  • /客户端/搜索/ 26
  • /客户端/搜索/麦克%20%Folley
  • /客户端/搜索/巴黎

所以我的控制器处理这条路线可以完成这项工作。有没有办法做到这一点?或者我应该选择JavaScript解决方案(让我感到悲伤)?

1 个答案:

答案 0 :(得分:0)

是的,你需要javascript来修改请求URL才能发送它:)。不需要表单标签,像这样的vanilla js方法可能就足够了:

<input type="text" id="search">

<button onclick="search()">
Submit
</button>

<script>
function search() {
  window.location='/search/' + 
    encodeURIComponent(document.getElementById('search').value);
}
</script>

您可以而且应该只使用一个路由,然后在控制器的方法中决定要搜索的内容和要返回的视图。路由应包含尽可能少的逻辑。