【问题标题】:Embedding Checkout on Laravel Blade在 Laravel Blade 上嵌入结帐
【发布时间】:2018-03-25 01:36:03
【问题描述】:

我正在尝试显示来自 Stripe (https://stripe.com/docs/checkout) 的嵌入式结帐表单。我注意到如果我将嵌入代码放在@section('content')@endsection 之间,当我单击用卡付款 按钮时,它不会显示表单。但是,如果我删除@section('content') 或将嵌入的代码放在它之外,那么它将完美地显示表单,但是,这会破坏我的布局结构。

index.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Billing</div>

                <div class="panel-body">
                <h1>Stripe</h1>

                //EMBEDDED CODE STARTS HERE
                <form action="/your-server-side-code" method="POST">
                    <script
                        src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="pk_test_sTxf2K6z6oemUXlC0NRcowxO"
                        data-amount="2000"
                        data-name="Demo Site"
                        data-description="2 widgets"
                        data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                        data-locale="auto"
                        data-zip-code="true"
                        data-currency="gbp">
                    </script>
                </form>
                //EMBEDDED CODE ENDS HERE


                </div>
            </div>
        </div>
    </div>
</div>
@endsection

谢谢!

编辑: 布局.app

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-default navbar-static-top">
            <div class="container">
                <div class="navbar-header">

                    <!-- Collapsed Hamburger -->
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
                        <span class="sr-only">Toggle Navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>

                    <!-- Branding Image -->
                    <a class="navbar-brand" href="{{ url('/') }}">
                        {{ config('app.name', 'Laravel') }}
                    </a>
                </div>

                <div class="collapse navbar-collapse" id="app-navbar-collapse">
                    <!-- Left Side Of Navbar -->
                    <ul class="nav navbar-nav">
                        &nbsp;
                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="nav navbar-nav navbar-right">
                        <!-- Authentication Links -->
                        @guest
                            <li><a href="{{ route('login') }}">Login</a></li>
                            <li><a href="{{ route('register') }}">Register</a></li>
                        @else
                            <li class="dropdown">
                                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                    {{ Auth::user()->name }} <span class="caret"></span>
                                </a>

                                <ul class="dropdown-menu" role="menu">
                                    <li>
                                        <a href="{{ route('logout') }}"
                                            onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                            Logout
                                        </a>
                                        <a href="{{ route('home') }}">Home</a>

                                        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                            {{ csrf_field() }}
                                        </form>
                                    </li>
                                </ul>
                            </li>
                        @endguest
                    </ul>
                </div>
            </div>
        </nav>

        @yield('content')
    </div>

    <!-- Scripts -->
    <script src="{{ asset('js/app.js') }}"></script>
</body>
</html>

【问题讨论】:

  • 请添加layouts.app视图的内容。
  • @Camilo 我已在帖子中添加了该内容。这是默认的 laravel 布局
  • 如果在@section('content') ... @endsection 中添加一些虚拟文本会发生什么?出现了吗?

标签: javascript php laravel stripe-payments blade


【解决方案1】:

所以我发现了问题所在,是因为&lt;script&gt;标签与Vue组件冲突。

所以有两种解决方案:

1) 创建一个没有Vue元素标识符&lt;div id="app"&gt;&lt;/div&gt;的重复布局

2) 使用 Vue 组件中的 mount() 钩子创建脚本标签。

createStripeScript () {
        const script = document.createElement('script')
        script.src = 'https://checkout.stripe.com/checkout.js'
        script.onload = () => this.initStripe()
        document.body.appendChild(script)
}

【讨论】:

    【解决方案2】:

    我在使用 Laravel 8 和 vue 脚手架时遇到了同样的问题。如果您将脚本标签从 &lt;script&gt; 更改为 &lt;script type="application/javascript"&gt; 或在 vue 组件加载后将脚本标签放在文件末尾也可以。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2018-03-07
      • 2015-04-30
      • 2016-10-02
      • 2017-08-31
      • 2013-06-01
      • 2013-05-25
      • 2018-11-04
      • 2016-06-18
      相关资源
      最近更新 更多