当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1中的多步骤注册

牧甫
2023-03-14

我试图建立多步骤登记表。

我有一条路线/登记

第一步我将此表单张贴到第二步

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

步骤2

我得到了第一步的数据,并将其放入隐藏的输入中。并张贴到第三步,以结束注册。如果成功,没有问题。但如果注册失败会发生什么?

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?步骤=2

问题是什么。我哪里出错了?

更新:(路线定义)

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

Route::post('/register', [
    'uses'       => 'Auth\AuthController@postRegister',
    'middleware' => ['guest'],
]);

更新2:(get寄存器和post寄存器)

注意:我没有完成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
            {

            }
        }
    }

共有2个答案

印曜灿
2023-03-14

也许你可以试试这个

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

我希望它对你有用。

孙熠彤
2023-03-14

这是因为重定向告诉浏览器在寄存器上执行GET请求?步骤=2URL。在getRegister方法中,不检查step值(因此您看到的格式与GETstep=1相同)。

我看到了两种可能的解决方案:

  • 要么调整重定向,使其向step=2发出POST请求(可能很棘手)
  • 或者为GET请求提供不同的页面,以step=2

我建议你第二个选择:

  • step=1中的表单应该发送到step=1,如果一切正常(使用flash cookie传递变量),应该重定向到GETstep=2
  • step=2中的表单应该发送到step=2,如果一切正常,应该重定向到GETstep=3(使用flash cookie传递变量)
 类似资料:
  • 本文向大家介绍Laravel中注册Facades的步骤详解,包括了Laravel中注册Facades的步骤详解的使用技巧和注意事项,需要的朋友参考一下 本文讲述了Laravel中注册Facades的步骤。分享给大家供大家参考,具体如下: 在Laravel中将类注册为Fcade可以使用Ioc容器,每次使用这个类的时候只会初始化一次类,类似单例模式,而且可以像使用静态方法调用类的方法,下面是在Lara

  • 本文向大家介绍JS中多步骤多分步的StepJump组件实例详解,包括了JS中多步骤多分步的StepJump组件实例详解的使用技巧和注意事项,需要的朋友参考一下 最近的工作在做一个多步骤多分步的表单页面,这个多步骤多分步的意思是说这个页面的业务是分多个步骤完成的,每个步骤可能又分多个小步骤来处理,大步骤之间,以及小步骤之间都是一种顺序发生的业务关系。起初以为这种功能很好做,就跟tab页的实现原理差不

  • 我想在每个步骤之前和之后执行一些操作(而不是场景)。用cucumber怎么做? 就像jUnit中的后和前。 **我正在使用java。

  • 本文向大家介绍易语言注册热键的步骤教学,包括了易语言注册热键的步骤教学的使用技巧和注意事项,需要的朋友参考一下 本经验介绍如何用易语言注册热键 首先 打开易语言  新建一个windows窗口程序 如图 易语言有自带的注册热键命令  他在扩展功能支持库的热键功能里面  如果找不到此命令 请打开工具 再选支持库配置 找到扩展功能支持库  然后勾选上 点击确定即可  然后我们在添加一个标签 用来反馈事件

  • 给定一个使用分区的Spring批处理作业,是否可能有多个分区步骤? 例如: 在上述示例中,是否可以将另一个添加到(最好不需要为每个分区步骤提供分区器)?如果没有,是否有其他方法来配置多个步骤,这些步骤将针对每个分区逐个执行?

  • 我有一个cucumber框架,它满足API和UI功能文件的需求。所以,我有两个特性文件,一个用于API,另一个用于UI。类似地,我在步骤定义文件夹中创建了两个类,一个用于UI,另一个用于API。结构如下所示: 文件列表 --API的功能文件 --UI的功能文件 分步定义 --斯特普德法皮 --斯特普德菲 测试者 --UITestRunner ############################