【问题标题】:How to this error "Undefined variable: selectedType "如何解决此错误“未定义的变量:selectedType”
【发布时间】:2018-10-08 14:41:43
【问题描述】:

我在registration.blade.php下面有这段代码:

@foreach($selectedTypes as $k=>$selectedType)
    <li>
        <span class="font-size-sm">{{$k}}</span>
        <span class="font-size-sm">{{$selectedType['quantity']}}</span>
        <span class="font-size-sm">{{ number_format($selectedType['price'], 2)}}€</span>
        <span class="font-size-sm">{{ number_format($selectedType['subtotal'], 2)}}€</span>
    </li>
@endforeach 

而且有时在registration.blade.php页面出现错误“http://proj.test/congress/1/congress-test/registration”:

Undefined variable: selectedType 

问题应该是会话“selectedTypes”不存在或已过期。因此,如果用户在具有该代码“@foreach($selectedTypes as $k=&gt;$selectedType)...”的注册页面中并且会话“selectedTypes”不存在,则可能有必要将用户重定向到他选择票证类型的页面。您是否知道这是否是解决问题的正确方法以及将用户重定向到具有该路线的大会详细信息页面所必需的:

Route::get('/congress/{id}/{slug?}', [
    'uses' => 'FrontController@show',
    'as'   =>'congresses.show'
]);

用户在注册页面的哪里有下面的路由并且会话“selectedTypes”不存在?

Route::get('/congress/{id}/{slug?}/registration', [
    'uses' => 'RegistrationController@displayRegistration',
    'as'   =>'congresses.registration'
]);

// 方法 storeQuantities() 其中 selectedTypes 存储在 session 中

public function storeQuantities(Request $request, $id, $slug = null){

        $ttypeQuantities = $request->get('ttypes');

        foreach($rtypeQuantities as $rtypeName => $quantity){
                $ttype = TicketType::where('name', $ttypeName)->firstOrFail();
                $price = $ttype->price;
                $selectedTypes[$ttype->name]['quantity'] = $quantity;
                $selectedTypes[$ttype->name]['price'] = $price;
                $selectedTypes[$ttype->name]['subtotal'] = $price * $quantity;

                $selectedTypes[$ttype->name]['id'] = $ttype->id;
        }
        Session::put('selectedTypes', $selectedTypes);
        return redirect(route('congresses.registration',['id' => $id, 'slug' => $slug]));
    }

【问题讨论】:

    标签: laravel


    【解决方案1】:

    始终检查$selectedType 变量

    @foreach($selectedTypes as $k=>$selectedType)
        <li>
            <span class="font-size-sm">{{$k}}</span>
            @isset($selectedType)
               <span class="font-size-sm">{{$selectedType['quantity']}}</span>
               <span class="font-size-sm">{{ number_format($selectedType['price'],
    2)}}€</span>
              <span class="font-size-sm">{{ number_format($selectedType['subtotal'], 2)}}€</span>
            @endisset
        </li>
    @endforeach 
    

    【讨论】:

    • 谢谢,但是那样的话,该页面中使用 selectedTypes 的内容更多,因此页面中有很多空白,因此最好将用户重定向到会议详细信息页面如果会话不存在。你知道如何实现吗?
    • 你的意思是如果$selectedType 没有设置然后重定向到不同的页面?从哪里重定向?控制器还是视图?我对你想要什么感到困惑
    • 如果用户访问此页面“proj.test/congress/1/congress-test/registration”并且会话“selectedTypes”不存在将用户返回到“layout.test/congress/1/congress-test”。
    • 为此,您需要签入您的控制器。只是一个简单的 if 条件 if(isset($selectedTypes)) return redirect(route('congresses.registration',['id' =&gt; $id, 'slug' =&gt; $slug])); else return redirect(route('congress.test')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多