我正在使用Laravel
框架构建练习应用程序我在其中一个视图中构建了一个表单,该表单设置为发布到同一个视图本身,但是当我点击提交表单时虽然我没有得到所需的输出,但我再次看到原始视图。
这是我的观点 index.blade.php
@extends('master')
@section('container')
<div class="wrapper">
{{ Form::open(array('url' => '/', 'method' => 'post')) }}
{{ Form::text('url') }}
{{ Form::text('valid') }}
{{ Form::submit('shorten') }}
{{ Form::close() }}
</div><!-- /wrapper -->
@stop
和我的 routes.php
Route::get('/', function()
{
return View::make('index');
});
Route::post('/', function()
{
return 'successfull';
});
到目前为止我尝试了什么
我尝试将帖子更改为其他视图并且有效。 但是我希望表单能够发布到同一个视图本身。
我没有返回一个我试图返回的字符串,而是继续查看它 没用。
我做错了什么?
我看到当表单发布帖子请求时,我收到了301 MOVED PERMANENTLY HEADER
答案 0 :(得分:11)
{{ Form::open(array('url' => ' ', 'method' => 'post')) }}
传递空格,因为网址对我有效。
答案 1 :(得分:2)
我认为这篇文章:Form submits as GET Laravel 4与您的问题有关。我认为问题是因为我不满意它是由一个带有/的表单url引起的。当我在表单中使用post到./ url时遇到问题,我发现了这一点。 github上还有一个错误,似乎与https://github.com/laravel/framework/issues/1804有关。
我知道这是一个老问题,但我发现这个问题有同样的问题,所以希望其他人能得到我的回答。
答案 2 :(得分:1)
您需要确保表单的方法不以/ 结尾才能正确路由。例如,如果您有以下路线:
Route::post('form/process', function()
{
# code here ...
});
然后您需要具有以下表单定义:
<form action="/form/process" method="POST">
我希望有所帮助。
答案 3 :(得分:1)
我对OSx + MAMP也有同样的问题,最初我用Raul的解决方案解决了这个问题:
{{ Form::open(array('url' => ' ', 'method' => 'post')) }}
但在与我的朋友协商后,我们得出结论,我的问题是由于这个原因 我的lavarel项目可以通过长期的本地路径来实现,如:
http://localhost/custom/custom2/...
在此位置根路径(“/”)上的post / get方法无法正常工作。
Lavarel正常工作必须是“vhost”,在这种情况下,根位置“/”上的问题get / post方法不存在。
我的朋友建议我使用http://www.vagrantup.com/
BYE
答案 4 :(得分:0)
Laravel文档中有一些有用的信息。看看这些:
我建议您阅读Resource Controllers文档,因为这样可以更轻松地处理表单。
答案 5 :(得分:0)
好吧,你只是返回视图,所以没有任何改变。您应该将路由绑定到控制器以执行某些逻辑并将数据添加到视图中,如下所示:
<强> index.blade.php
强>
@extends('master')
@section('container')
<div class="wrapper">
@if (isset($message))
<p>{{$message}}</p>
@endif
{{ Form::open(array('url' => '/', 'method' => 'post')) }}
{{ Form::text('url') }}
{{ Form::text('valid') }}
{{ Form::submit('shorten') }}
{{ Form::close() }}
</div><!-- /wrapper -->
@stop
您的路线
Routes::any('/', 'home@index');
您是控制器HomeController.php
public function index()
{
$data = array();
$url = Input::get('url');
if ($url)
$data['message'] = "foo";
return View::make('index', $data);
}
您也可以在不使用此类控制器的情况下修改当前路线(使用新视图文件)
Route::get('/', function()
{
return View::make('index');
});
Route::post('/', function()
{
return View::make('index')->with('message', 'Foo');
});
答案 6 :(得分:0)
问题在于Apache中的defualt从2.0.51大幅下降并且更高: http://httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash
如果您不想更改Apache配置,最佳解决方案是将帖子放在不同的路径中:
GOOD:
Route::get('/',
['as' => 'wizard', 'uses' => 'WizardController@create']);
Route::post('wizard-post',
['as' => 'wizard_store', 'uses' => 'WizardController@store']);
不好:
Route::get('/',
['as' => 'wizard', 'uses' => 'WizardController@create']);
Route::post('/',
['as' => 'wizard_store', 'uses' => 'WizardController@store']);