2015-11-16 3 views
23

Я пытаюсь создать многоэтапную регистрационную форму.Регистрация нескольких шагов в Laravel 5.1

У меня есть маршрут, /register

Шаг 1 Я отправляю эту форму Step2

route('register', ['step' => 1]) 

enter image description here

Шаг 2

И я получение данных с шага 1 и внутри скрытых входов. И отправьте на третий шаг для завершения регистрации. Если это успешно, не проблема. Но что произошло, если регистрация не удалась?

route('register', ['step' => 2]) 

Шаг 3

route('register', ['step' => 3]) 

Если регистрация не удается, я перенаправлять пользователя step2.

Вот мой код перенаправления.

$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 
    { 
     // 
    } 

Если проверка не удалась, я перенаправляю на step2 все нормально. Но я вижу формы на картинке (Шаг 1). Но мой uri is/register? Step = 2

В чем проблема. Где я делаю ошибку?

UPDATE: (Route Определения)

Route::get('/register', [ 
    'uses'  => 'Auth\[email protected]', 
    'as'   => 'register', 
    'middleware' => ['guest'], 
]); 

Route::post('/register', [ 
    'uses'  => 'Auth\[email protected]', 
    'middleware' => ['guest'], 
]); 

UPDATE 2: (getRegister и postRegister)

Примечание: Я не закончил кодирования getRegister и postRegister.

getRegister

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); 
    } 

postRegister

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 
      { 

      } 
     } 
    } 
+0

Какое определение маршрута? – Bogdan

+0

Я добавил определения маршрута –

+0

Не могли бы вы также отправить метод getRegister, чтобы я мог видеть, как вы обрабатываете шаги для этого действия. – Bogdan

ответ

0

Может быть, вы можете попробовать это

return redirect()->back() 
    ->withInput(array_merge($new_user, ['step', $step-1])) 
    ->withErrors($validator->getMessageBag()->toArray()); 

Я надеюсь, что это работает для вас.

+0

Я уже пробовал, что он не работает –

4

Это потому, что ваше перенаправление сообщает браузеру, чтобы он выполнил запрос GET на URL-адрес register?step=2. И в вашем методе getRegister вы не проверяете значение step (следовательно, вы видите ту же форму, что и для GET step=1).


Я вижу два возможных решения:

  • либо вам настроить ваше переназначение так, что он запрос POST к step=2 (может быть сложно)
  • или вы служите другую страницу для запроса GET в step=2

Я бы посоветовал вам второй вариант:

  • Форма в step=1 должен сделать POST к step=1, который должен перенаправить к GET step=2, если все в порядке (с использованием флэш-куки, чтобы передать переменные)
  • Форма в step=2 должен сделать POST к step=2, который следует перенаправить на GET step=3, если все в порядке (с использованием флэш-файлов cookie для передачи переменных)
Смежные вопросы