【问题标题】:How to store the selected quantities in the session and show this info in next page?如何在会话中存储选定的数量并在下一页显示此信息?
【发布时间】:2018-09-09 10:41:11
【问题描述】:

我有篮球比赛详情页面“single.blade.php”和一个购票页面“payment.blade.php”。在比赛详情页面中,用户可以通过选择选项选择门票的类型以及他们想要的每张门票的数量。

我对如何获取用户在比赛详细信息页面中选择的每张门票的数量、在会话中存储该信息并将该信息发送到支付页面以显示所选门票类型和数量存有疑问在下一页(付款页面)。

我对这个问题的代码结构:

我有一个 FrontController,它有 single() 方法来显示比赛详情页面:

public function single($id){
    $match = Match::where('id', $id)->first();
    $tickets = Ticket::where('match_id', $match_id->id)->get();
    return view('matchs.show')->with('match',$match)->with('match', $match)->with('tickets', $tickets);
}

然后在比赛详细信息页面中,我列出了门票的类型,每张都有一个选择菜单,因此用户可以选择每张需要多少张门票:

<ul>
    @foreach($tickets as $ticket)
        <li>
            <span>{{$ticket->title}}</span> 
            <form method="post" action="{{route('matchs.payment', ['id' => $match->id, 'slug' => $match->slug])}}">

                <select name={{ $ticket->title }}>
                    <option selected>0</option>
                     <option value="1">1</option>
                     <option value="2">2</option>
                     <option value="3">3</option>
                     <option value="4">4</option>
                </select>
            </form>
            <span>X {{$ticket->showPrice()}}</span>
        </li>
    @endforeach
    <li>
        <span>TOTAL</span>
        <span>0.00€</span>
    </li>
    <input type="submit" value="Go To Payment Page"/>
    </form>
</ul>

用户选择数量并单击“下一步”后,他应该进入支付页面,并且在上一页中选择的类型和数量应该会出现在这个支付页面中。所以,我有一个 PaymentController 并创建了一个 storeQuantity() 方法。您知道如何在此方法中正确存储会话中选择的类型和数量,然后如何在付款页面中显示此信息吗?

class PaymentController extends Controller
{
    public function storeQuantity(Request $request){
        //dd($request->all());
        return view('matchs.payment');
    }
}

路线:

Route::post('/match/{id}/{slug?}/payment', [
    'uses' => 'PaymentController@storeQuantity',
    'as'   =>'matchs.payment'
]);

dd($request-&gt;all()); 显示:

array:2 [▼
  "center_bench" => "1"
  "left_bench"   => "1"
]

注意:我也不知道它是否真的需要会话,也许下一个按钮可以有一个发布路线并将必要的信息(选择的门票和数量)传递到下一页(付款页面)但我不明白这个过程是。

【问题讨论】:

  • 你可以使用 sesssion()->put('ticket', SELECTED_NUMBER);您可以像 session()->get('ticket') 一样检索它。我认为您也可以在视图中使用这些助手。
  • 谢谢,但是选择菜单名称是动态的,“name={{ $ticket->title }}”,所以如何获取票的标题和选择的数量并将其存储在会话中?

标签: php laravel


【解决方案1】:

我认为它对你有用......

name={{ Session::put($ticket->title, SELECTED_NUMBER)}}

您可以访问display session data on view template in laravel 5

【讨论】:

  • 谢谢,但是信息是存储在会议详细信息页面的名称属性中的会话中,而不是存储在 PaymentController 的 storeQuantity() 方法中?然后怎么跳转到支付页面?
  • 我认为会话闪存数据可以帮助您。有时您可能希望将项目存储在会话中仅用于下一个请求。您可以使用 flash 方法执行此操作。访问 [laravel.com/docs/5.2/session#flash-data] 或 [stackoverflow.com/questions/37485527/… 我希望它对你有用...
  • 但是如何存储每种票种选择的数量(即动态)?
【解决方案2】:

对于这种类似于电子商务网站中的购物车系统的功能,我们使用 javascript local storage 你可以做这些步骤 当用户选择一个选项时,执行onchange() 函数,该函数将仅将所选项目的值存储在javascript本地存储中,但在存储之前它将检查是否存在相同key 的任何值(这将如果用户想要更改所选值,则使其动态化) 然后,当单击提交按钮时,从 javascript localstorage 中获取值并将其放入会话中(使用 flash 会话)或仅在发布请求中发送它

【讨论】:

  • 谢谢,但为什么需要本地存储?如果没有本地存储,它就无法工作,当单击“下一步”按钮时,发送一个包含每种票类型的选定数量信息的发布请求?
  • 您也可以使用 cookie,但过期时间应该更短且合乎逻辑。但是 javascript 本地存储是不错且简单的选择。每个浏览器都提供了一些可以与 javascript 一起使用的存储空间
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多