php - formrequest - laravel validation regex
Registro Multi Paso en Laravel 5.1 (2)
Es porque su redirección le está diciendo al navegador que haga una solicitud GET en el register?step=2
URL. Y en su método getRegister
no verifica el valor del step
(por lo tanto, ve la misma forma que para el step=1
GET step=1
).
Veo dos soluciones posibles:
- o bien, modifica su redirección para que realice una solicitud POST al
step=2
(puede ser complicado) - o sirves una página diferente para la solicitud GET al
step=2
Te aconsejaría para la segunda opción:
- La forma en el
step=1
debe hacer una POST alstep=1
, que debe redirigirse a unstep=2
GETstep=2
si todo está bien (usando una cookie flash para pasar las variables) - La forma en el
step=2
debe hacer una POST alstep=2
, que debe redirigirse a unstep=3
GETstep=3
si todo está bien (usando una cookie flash para pasar las variables)
Estoy tratando de construir el formulario de registro de varios pasos.
Tengo una ruta /register
Paso 1 Estoy publicando este formulario para el paso 2
route(''register'', [''step'' => 1])
Paso 2
Y obtengo datos del paso 1 y los coloco en entradas ocultas. Y publicar en el tercer paso para finalizar el registro. Si tiene éxito no hay problema. ¿Pero qué pasó si falla el registro?
route(''register'', [''step'' => 2])
Paso 3
route(''register'', [''step'' => 3])
Si el registro falla, estoy redirigiendo al usuario al paso 2.
Aquí está mi código de redireccionamiento.
$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
{
//
}
Si la validación falla, estoy redirigiendo a step2 todo ok. Pero estoy viendo formas en la imagen (Paso 1) Pero mi uri es / registrar? Paso = 2
Cuál es el problema. ¿Dónde estoy cometiendo un error?
ACTUALIZACIÓN: (Definiciones de ruta)
Route::get(''/register'', [
''uses'' => ''Auth/AuthController@getRegister'',
''as'' => ''register'',
''middleware'' => [''guest''],
]);
Route::post(''/register'', [
''uses'' => ''Auth/AuthController@postRegister'',
''middleware'' => [''guest''],
]);
ACTUALIZACIÓN 2: (getRegister y postRegister)
Nota: No terminé de codificar getRegister y postRegister.
obtenerRegistrarse
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);
}
registro posterior
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
{
}
}
}
Tal vez puedas probar esto
return redirect()->back()
->withInput(array_merge($new_user, [''step'', $step-1]))
->withErrors($validator->getMessageBag()->toArray());
Espero que te funcione bien.