我试图了解POST路由的工作原理。我有一个方法定义,signup(),我想使用相同的方法来检测用户是否想要注册(所以加载注册视图)或用户已经在注册视图(窗体)中并发布他的详细信息注册。
这可以在laravel中的一个功能中完成吗?如果有,那怎么样?这是由Routes控制的,如果是,有人可以通过一个例子澄清这个吗?
Laravel文档对于初学者来说确实令人困惑。
提前致谢,
答案 0 :(得分:1)
是的,您可以使用一种途径来执行此操作:
Route::any('signup', 'SignupController@signup');
或指向同一网址的两条路线:
Route::get('signup', 'SignupController@getSignup');
Route::post('signup', 'SignupController@postSignup');
在这两种情况下,您都需要一个控制器:
这是所有相关方法:
class SignupController extends Controller {
// This one is for Route::any()
public function signup()
{
if (Input::has('email'))
{
// create your user
}
return View::make('signup');
}
// those two are for the second option
public function getSignup()
{
return View::make('signup');
}
public function postSignup()
{
// create your user
}
}
答案 1 :(得分:1)
虽然这是可行的,但不建议这样做,您应该保持路线彼此分开(使用GET
和POST
),并且应该使用不同的方法。基本上任何表单提交都应该使用POST
请求(使用POST HTTP方法)并显示表单只使用GET
方法,但无论如何,你可以这样做(你要求的):
// Declare the route
Route::post('signup', 'UserController@signup');
现在在signup
检查submit
按钮以确保提交表单,因此如果submit
数组中的输入$_POST
可用,则表单以其他方式提交,但未提交,但是向用户显示了一个空表单,或者发生了失败的验证重定向。也许是这样的:
public function signup()
{
if(Input::has('submit')) {
// It's a submission, so Validate submitted Form data
// if invalid then redirect back with inputs and errors
// Otherwise save it
}
else {
// show the form
return View::make('user.signup');
}
}
这只是一个想法,但是,这是一个坏主意,只要想想如果你的表单上有错误会发生什么,你想重定向然后整个事情会变得混乱,控制器方法将变得完全一段时间后难以管理,因为它做了很多事情,而它应该只有一个特定的责任。
我有这种实践经验,因为,我曾经认为,如果我可以使用一个功能来加载和保存甚至更新那么它会很聪明但说实话它是愚蠢的,显然它是#s反对KISS(保持简单愚蠢)原则的反模式,而不是最佳实践。这种编码是一个坏主意,你将来会受到影响而且你不敢触摸代码,认为如果你因为你自己的代码而混淆任何东西。
只需使用单独的方法显示表单并保存提交的数据,另请查看this on slideshare。