我正试图让一些非常基本的东西运行。我已经习惯了CI,现在正在学习Laravel 4,而他们的文档并没有让我感到轻松!不管怎么说, 我试图创建一个登录表单,并确保数据被成功发布,在下一个表单中打印。我得到了这个异常。
Symfony \ Component \ HttpKernel \ Exception \ 异常。 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', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
最后我的视图login.php有这个表单方向。
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
如果有任何帮助,我将非常感激。
你得到这个错误是因为你在向一个GET
路由发布信息。
我将把你的 "validate "路由分成单独的 "GET "和 "POST "路由。
新的路由: ``php Route::post('validate', 'MemberController@validateCredentials')。
Route::get('validate', function () { return View::make('members/login')。 });
那么你的控制器方法就可以是
```php
公共函数validateCredentials()
{
$email = Input::post('email');
$password = Input::post('password')。
return "Email: " . $email . " and Password: " . $password;
}
我怀疑问题出在你的路线定义上。
你把路由定义为 "GET "请求,但表单可能发送的是 "POST "请求。改变你的路由定义。
``php Route::post('/validate', 'MemberController@validateCredentials') 。
一般来说,使用命名的路由是比较好的做法(如果控制器的方法/类发生变化,有助于扩展)。
```php
Route::post('/validate', array(
'as'=> 'validate'。
'uses'=> 'MemberController@validateCredentials'
));
在表单中使用以下内容
<?php echo Form::open(array('route' => 'validate')); ? >
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ? >
默认情况下,Form::open()
假设为POST
方法。
你的路由中有GET
,请在相应的路由中把它改为POST
。
或者如果你想使用GET
方法,那么添加method
参数。
例如。
Form::open(array('url' => 'foo/bar', 'method' => 'get')