我只是laravel框架的初学者。我创建了一个简单的表单和控制器方法。我认为默认情况下,表单方法是post。但现在我需要将其作为get方法,并且还希望将所选输入传递给控制器并在URL中显示该参数。目前我确实喜欢下面但失败了。
index.blade.php
<?php echo Form::open(array('url' => 'home/find','method' => 'get')); ?>
<select class="location" id="location" name='location'>
<?php
$id1 = /* get user db details based on locations*/
$location_id_drop_down='';
foreach($idl as $lrow)
{
$city_name=Location::where('location_id','=',$lrow['loc_id'])->first();
if($city_name==array()) continue;
if(Input::old('location')==$lrow['loc_id'])
{
$location_id_drop_down.="<option value='" . $city_name['location_name'] . "' selected='selected'>" .$city_name['location_name'] . "</option>";
}
else
{
$location_id_drop_down.="<option value='" . $city_name['location_name'] . "'>" . $city_name['location_name']. "</option>";
}
}
echo $location_id_drop_down;
?>
</select>
<input type="submit" name="search" id="search_submit" class="search_submit" value="Search" />
{{ Form::close() }}
HomeController.php
public function anyFind($s='',$d='',$l='') {
if(Input::get('search'))
{
$location=Input::get('location');
}
else
{
if($l!='~')
$location=$l;
}
/* queries to get the user details and images based on selected location and list them*/
}
routes.php文件
Route::get('/find/{location}','HomeController@anySearch');
但是这会将网址显示为mysite.com/home/find?location=Test&search=Search
我需要mysite.com/home/find/location
我的代码中有任何错误吗?
修改
作为实验的一部分,我尝试了这种方法。我在控制器函数anyfind()
的末尾给出了如下所示的重定向return Redirect::to('/home/find/'.$location);
但是这会重定向我,但有人知道如何使用此自定义URL加载search.search_new.blade.php吗?
答案 0 :(得分:0)
使用Laravel根本无法在您的网址(不是查询字符串)中使用表单中的字段。你可以做的只是使用javascript。
首先让占位符放在动作网址
中<?php echo Form::open(array('url' => 'home/find/%location%','method' => 'get')); ?>
$('form').on('submit', function(){ // you maybe need to be a bit more precise with the selector here
var location = $('#location').val();
$(this).prop('action', $(this).prop('action').replace('%location%', location));
});
document.getElementsByTagName('form')[0].onsubmit = function(e){
var location = document.getElementById('location').value;
e.target.setAttribute('action', e.target.getAttribute('action').replace('%location%', location));
};
顺便说一下:你问题中的代码还有一些奇怪的东西。我只是假设因为复制粘贴等而发生这种情况。所以,如果它仍然不起作用,请确保发布正确代码
答案 1 :(得分:0)
在HomeController.php中的方法结尾处插入anyFind(),您可以在其中设置页面视图:
if (Input::get('location') != '') {
return Redirect::route('home.findByLocation',Input::get('location'));
}
return View::make('home', compact('location));
同样在routes.php中添加以下代码:
Route::get('home/find/{location?}', array('as'=>'home.findByLocation', 'uses'=>'HomeController@anyFind'));