2015-11-16 15 views
23

Sto provando a creare un modulo di registrazione multi-step.Registrazione multi step in Laravel 5.1

Ho un percorso /register

Fase 1 Sto postando questo modulo per STEP2

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

enter image description here

Fase 2

e io sono ottenere i dati di step1 e put all'interno di input nascosti. E postare alla terza fase per terminare la registrazione. Se ha successo nessun problema. Ma cosa è successo se la registrazione fallisce?

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

Fase 3

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

se la registrazione non sto reindirizzare utente a STEP2.

Ecco il mio codice di reindirizzamento.

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

Se la convalida fallisce, sto reindirizzando a step2 tutto ok. Ma sto vedendo le forme nell'immagine (Passo 1) Ma il mio uri è/registro? Step = 2

Qual è il problema. Dove sto sbagliando?

UPDATE: (Route Definizioni)

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

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

UPDATE 2: (getRegister e postRegister)

Nota: Non ho finito di codifica getRegister e 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

Qual è la definizione del percorso? – Bogdan

+0

ho aggiunto le definizioni di percorso –

+0

Potresti anche postare il metodo 'getRegister', così posso vedere come gestisci i passaggi per quell'azione. – Bogdan

risposta

0

Forse si può provare questo

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

Spero che funziona bene per voi.

+0

ho già provato questo non funziona –

4

È perché il reindirizzamento sta dicendo al browser di fare una richiesta GET sull'URL register?step=2. E nel tuo metodo getRegister non controlli il valore step (quindi vedi lo stesso modulo di GET step=1).


Vedo due possibili soluzioni:

  • o si tweak il vostro reindirizzamento in modo che non una richiesta POST a step=2 (potrebbe essere difficile)
  • o si servono di una pagina diversa per la richiesta GET a step=2

vi consiglio per la seconda opzione:

012.
  • La forma in step=1 dovrebbe fare un post a step=1, che dovrebbe reindirizzare a un GET step=2 se tutto va bene (usando dei cookie flash per passare le variabili)
  • La forma in step=2 dovrebbe fare un post per step=2, che dovrebbe reindirizzare a GET step=3 se tutto va bene (utilizzando il flash cookie per passare le variabili)