2013-11-04 146 views
49

我想获得一些非常基本的运行。我习惯了CI,现在正在学习Laravel 4,他们的文档并不容易!无论如何,我正在尝试创建一个登录表单,并确保通过将数据打印到下一个表单中来成功发布数据。我得到这个异常:laravel投掷MethodNotAllowedHttpException

的Symfony \分量\ HttpKernel \异常\ MethodNotAllowedHttpException

和我MemberController.php:

public function index() 
    { 
     if (Session::has('userToken')) 
     { 
      /*Retrieve data of user from DB using token & Load view*/ 
      return View::make('members/profile'); 
     }else{ 
      return View::make('members/login'); 
     } 
    } 

    public function validateCredentials() 
    { 
     if(Input::post()) 
     { 
      $email = Input::post('email'); 
      $password = Input::post('password'); 
      return "Email: " . $email . " and Password: " . $password; 
     }else{ 
      return View::make('members/login'); 
     } 
    } 

和路线有:

Route::get('/', function() 
{ 
    return View::make('hello'); 
}); 

Route::get('/members', '[email protected]'); 
Route::get('/validate', '[email protected]'); 

最后我的观点登录.php有这种形式的方向:

<?php echo Form::open(array('action' => '[email protected]')); ?> 

任何帮助将不胜感激。

+0

在哪个''url''中出现错误? – devo

+0

你尝试过'php artisan dump-autoload'吗? – Andreyco

+0

旧帖子,但人们仍然偶然发现它 - 尝试“作曲家转储自动加载”。为我工作。 – kirgy

回答

10

我怀疑问题在于你的路线定义。您将路由定义为“获取”请求,但该表单可能会发送“发布”请求。改变你的路线定义。

Route::post('/validate', '[email protected]'); 

这是通常更好的做法是使用命名的路线(有利于规模如果控制器方法/类的变化)。

Route::post('/validate', array('as' => 'validate', 
    'uses' => '[email protected]')); 

在形式使用下面

<?php echo Form::open(array('route' => 'validate')); ?> 
6

<?php echo Form::open(array('action' => '[email protected]')); ?>

默认Form::open()假定POST方法。

你已经在你的路线。将其更改为相应路线中的post

或者如果您想使用get方法,则添加method参数。

例如

Form::open(array('url' => 'foo/bar', 'method' => 'get'))

122

,因为你要发送一个GET路线你得到这个错误。

我将你的路由分为“验证”到单独的GET和POST路由。新路线:

Route::post('validate', '[email protected]'); 

Route::get('validate', function() 
{ 
    return View::make('members/login'); 
}); 

那么你的控制器的方法可能只是

public function validateCredentials() 
{ 
    $email = Input::post('email'); 
    $password = Input::post('password'); 
    return "Email: " . $email . " and Password: " . $password; 
} 
+0

+1您对我的情况绝对正确...... – Ronser

+1

+1您的解决方案。我为这个问题失去了很多次。长寿! – MH2K9

+4

第一行是我所需要的。谢谢! –

9

我遇到了这个问题,以及这里的其他答案是有益的,但我使用的是Route::resource这需要的GET照顾, POST和其他请求。

在我来说,我离开了我的路线为是:

Route::resource('file', 'FilesController');

,简单地修改了我的形式提交到store功能在我FilesController

{{ Form::open(array('route' => 'file.store')) }}

这个固定的问题,我认为这是值得指出作为一个单独的答案,因为各种其他答案建议增加一个新的POST路线。这是一个选项,但没有必要。

3

我面对错误,
问题是FORM METHOD

 
{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'PUT','files'=>true)) }} 

它应该是这样的

 
{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'POST','files'=>true)) }} 
2

我的问题是不是我的路线是设置不正确,但我引用了错误的Form方法(我从不同的表单复制而来)。我在做...

{!! Form::model([ ... ]) !!} 

(没有指定模型)。不过,我本来应该使用常规方法open ...

{!! Form::open([ ... ]) !!} 

因为要model第一个参数期待一个实际的模型,它没有得到任何的我的选择,我指定。希望这可以帮助知道他们的路线的人是正确的,但其他的东西是不对的。

2

我也有同样的错误,但有一个不同势修复,在我XYZ.blade.php我有:

{!! Form::open(array('url' => 'services.store')) !!} 

这给了我的错误, - 我还是不现在为什么 - 但是当我改成了

{!! Form::open(array('route' => 'services.store')) !!}

它的工作!

我认为这是值得分享:)

3

一般有使用错误的HTTP动词如: 调用与POST请求

13

PUT路线的问题是:您使用POST,但实际上你有执行PATCH 要解决此添加

<input name="_method" type="hidden" value="PATCH"> 

表单::示范线后仅仅

+0

一个深思熟虑的人,在Laravel中解决了我的问题 –

+0

,你可以在模板中使用'{{method_field('PATCH')}}'。 –

0

以及当我有这些问题,我面临2个误码 {!! Form::model(['method' => 'POST','route' => ['message.store']]) !!} 我纠正它通过这样做 {!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

所以只是为了expanciate我改变形式modelopen到,也错误地在那里放置在方括号的路由。