我正在尝试构建多步骤注册表单。
我有一个路线/register
第 1 步 我将此表单发布到第 2 步
route('register', ['step' => 1])
第 2 步
我正在获取 step1 的数据并将其放入隐藏的输入中。并发布到第三步以结束注册。如果成功就没有问题。但是如果注册失败怎么办?
route('register', ['step' => 2])
第 3 步
route('register', ['step' => 3])
如果注册失败,我会将用户重定向到第 2 步。
这是我的重定向代码。
$new_user = $request->all();
$validator = Validator::make($new_user, $this->rules());
if ($validator->fails())
{
return redirect()->back()
->withInput($new_user)
->withErrors($validator->getMessageBag()->toArray());
}
else
{
//
}
如果验证失败,我将重定向到第 2 步,一切正常。但是我在图片中看到了表格(第 1 步)但是我的 uri 是/register?step=2
有什么问题。我在哪里犯错了?
更新:(路线定义)
Route::get('/register', [
'uses' => 'Auth\AuthController@getRegister',
'as' => 'register',
'middleware' => ['guest'],
]);
Route::post('/register', [
'uses' => 'Auth\AuthController@postRegister',
'middleware' => ['guest'],
]);
更新 2:(getRegister 和 postRegister)
注意:我还没有完成 getRegister 和 postRegister 的编码。
获取注册
public function getRegister(Request $request)
{
if(!$request->has('step'))
{
/**
* Eğer kayıt ekranında ?step=1,2 vs. yoksa direk ?step=1 e yönlendirme yapıyoruz.
*/
return redirect()->route('register', ['step' => 1]);
}
$countries = (new LocationCountry)->getAllCountries()->toArray();
foreach($countries as $key => $country)
{
$countryNames[$key] = $countries[$key]['translation'] = trans('country.'.$country['code']);
}
array_multisort($countryNames, SORT_STRING, $countries);
/**
* Ülke ve Zaman Dilimi için Varsayılan Seçimi
*/
$default = new \stdClass();
$default->country = (Lang::locale() == 'tr') ? 'TR' : 'US';
$default->timezone = (Lang::locale() == 'tr') ? 'Europe/Istanbul' : 'America/New_York';
$timezones = (new DateController)->getTimeZoneList();
return view('auth.register.index', compact(['timezones', 'countries', 'default']))
->with('orderProcess', TRUE);
}
注册后
public function postRegister(Request $request){
if(!$request->has('step'))
{
/**
* Eğer kayıt ekranında ?step=1,2 vs. yoksa direk ?step=1 e yönlendirme yapıyoruz.
*/
return redirect()->route('register', ['step' => 1]);
}
if ($request->get('step') == 2)
{
$new_user = $request->all();
$new_user['tc_citizen'] = (!isset($new_user['tc_citizen'])) ? 0 : 1;
$new_user['area_code'] = (new LocationCountry)->getCountryAreaCodeByCode($new_user['country']);
$cities = (new Location)->getCities();
/**
* Eğer Post Durumunda ise ve town değişkeni varsa...
*/
if($request->has('town'))
{
$towns = (new Location)->getTowns($request->get('city'));
if(!$towns->isEmpty())
{
}
}
return view('auth.register.step2', compact(['new_user', 'cities']))
->with('orderProcess', TRUE);
}
if($request->get('step') == 3)
{
/**
* Kayıt Sonuç Sayfası
*/
$new_user = $request->all();
$validator = Validator::make($new_user, $this->rules());
if ($validator->fails())
{
return redirect()->back()
->withInput($new_user)
->withErrors($validator->getMessageBag()->toArray());
}
else
{
}
}
}
最佳答案
这是因为您的重定向告诉浏览器对 register?step=2
URL 执行 GET 请求。在您的 getRegister
方法中,您不检查 step
值(因此您会看到与 GET step=1
相同的形式)。
我看到两种可能的解决方案:
- 要么调整重定向,使其向
step=2
发出 POST 请求(可能很棘手) - 或者您为
step=2
的 GET 请求提供不同的页面
我会建议您选择第二个选项:
step=1
中的表单应该对step=1
执行 POST,如果一切都应该重定向到 GETstep=2
很好(使用 flash cookie 传递变量)step=2
中的表单应该对step=2
执行 POST,如果一切都应该重定向到 GETstep=3
很好(使用 flash cookie 传递变量)
关于php - Laravel 5.1 中的多步注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744526/