【发布时间】:2016-09-23 10:10:38
【问题描述】:
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 属性的一部分传递?关键是能够发起这类请求:
- /clients/search/26
- /clients/search/Mike%20%Folley
- /clients/search/巴黎
所以我处理这条路线的控制器可以完成这项工作。有什么办法吗?还是我应该选择 JavaScript 解决方案(这让我有点难过)?
【问题讨论】:
-
如果你想改变表单的 action 属性,你必须使用 JavaScript。但你究竟为什么需要它?为了帮助您的路线在两个搜索控制器之间做出决定?有一个单独的搜索控制器会更好吗?它的代码将根据搜索词的类型来决定是按 id 还是按名称搜索?
-
取决于它是文本还是 id,我的观点是不一样的:如果它是一个 id,每个客户在数据库中都有一个唯一的 ID,我会获取确切的客户信息,所以我的观点是不同的.如果是文本搜索,它可能有多个与该文本匹配的客户端(例如:搜索“mike”,数据库中可能有多个“Mike”,因此我在数组中获取它们,而不是特定的客户端视图) .我设法使用 JavaScript 进行搜索。也许如果我以另一种方式解决问题,我可以使用表单参数进行管理。我猜这太棘手了。
-
一个控制器可以返回不同的视图。
标签: php forms laravel laravel-5