2015-11-16 43 views
23

私は複数ステップの登録フォームを作成しようとしています。Laravel 5.1で複数ステップ登録する

私はSTEP2に

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

enter image description here

ステップ2

そして私ですがこのフォームを投稿していた経路/register

ステップ1 を持っていますstep1のデータを取得して置く隠された入力の中に。登録を終了するための第3ステップへの投稿。成功しても問題はありません。しかし、登録が失敗した場合はどうなりますか?

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

検証が失敗した場合は、すべて手順2にリダイレクトします。しかし、私は写真を見ています(ステップ1)。しかし、私のuriは/ registerですか?step = 2

何が問題なのですか?どこで私は間違っているのですか?

UPDATE:(ルート定義)

Route::get('/register', [ 
    'uses'  => 'Auth\AuthCo[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

URLがregister?step=2のURLでGETリクエストを行うようブラウザに指示しているためです。 getRegisterメソッドでは、stepの値をチェックしません(したがって、GET step=1と同じフォームが表示されます)。

  • それはstep=2にPOSTリクエストをするようにあなたが
  • (トリッキーかもしれません)あなたのリダイレクトを微調整したり、GETリクエストのための別のページに役立つのいずれか:私は2つの解決策を参照


    step=2

に私は2番目のオプションのためにあなたを助言しますstep=2step=1

  • フォームすべてがうまくている場合(変数を渡すためにフラッシュクッキーを使用して)GET step=2にリダイレクトすべき、step=1にPOSTを行う必要があります
  • フォームはstep=2にPOSTを行う必要があり、そのすべてがうまくいけば(フラッシュクッキーを使って変数を渡す)GET step=3にリダイレクトする必要があります
関連する問題