0

私はOctoberCMSコンポーネントで作業していますが、動作に問題があります。このコードを見てください:

class Payment extends ComponentBase
{
    /**
     * This hold the amount with PayPal fee and discount applied and pass back to template
     * @var float
     */
    public $amountToReload;

    public function onAmountChange()
    {
        $amount = post('amount');

        if (empty($amount)) {
            throw new \Exception(sprintf('Por favor introduzca un valor.'));
        }

        $this->amountToReload = round($amount - ($amount * (float) Settings::get('ppal_fee') - (float) Settings::get('ppal_discount')), 2);

        return ['#amountToReload' => $this->amountToReload];
    }

    public function onRun()
    {
        $step = $this->param('step');
        $sandboxMode = Settings::get('sandbox_enabled');

        switch ($step) {
            case "step2":

                echo $this->amountToReload;

                $params = [
                    'username' => $sandboxMode ? Settings::get('ppal_api_username_sandbox') : Settings::get('ppal_api_username'),
                    'password' => $sandboxMode ? Settings::get('ppal_api_password_sandbox') : Settings::get('ppal_api_password'),
                    'signature' => $sandboxMode ? Settings::get('ppal_api_signature_sandbox') : Settings::get('ppal_api_signature'),
                    'testMode' => $sandboxMode,
                    'amount' => $this->amountToReload,
                    'cancelUrl' => 'www.xyz.com/returnUrl', // should point to returnUrl method on this class
                    'returnUrl' => 'www.xyz.com/cancelUrl', // should point to cancelUrl method on this class
                    'currency' => 'USD'
                ];

                $response = Omnipay::purchase($params)->send();

                if ($response->isSuccessful()) {
                    // payment was successful: update database
                    print_r($response);
                } elseif ($response->isRedirect()) {
                    // redirect to offsite payment gateway
                    return $response->getRedirectResponse();
                } else {
                    // payment failed: display message to customer
                    echo $response->getMessage();
                }

                break;

            default:
                break;
        }

        $this->page['step'] = $step;
    }

    public function cancelPayment()
    {
       // handle payment cancel   
    }
}

$amountToReloadクラスの上に public として宣言された var があり、その値をメソッドに設定した場合はどうonAmountChange()なりますか? 次に、onRun()メソッドでは、この変数は設定値を保持すべきではありませんか? NULL または値なしで到着するのはなぜですか? 私は Symfony から来た Laravel の初心者です。クラス全体で問題なく使用できるように var 値を保持する最良の方法は何ですか?

この投稿の 2 番目の部分として、cancelPayment()メソッドの有効なルートを生成する必要があります。これは次の行に続きます。

'returnUrl' => 'www.xyz.com/cancelUrl', // should point to cancelUrl method on this class

Laravelで、おそらくパラメーターを使用して有効なURLを作成するにはどうすればよいですか? URL ヘルパーを使用していますか? ルートを使用していますか? どれ?

4

1 に答える 1

1

クラスプロパティとして宣言されているため、アプローチは適切です(ただし、明示的に公開したくない場合はamountToReload、そのプロパティを作成することをお勧めします)。protected唯一の問題は、の値を設定するために、 のonAmountChange()前にメソッドを呼び出す必要があることです。onRun()amountToReload

URL の生成に関しては、最も簡単な方法は次を使用することurl()です。

url('foo/bar', $parameters = array(), $secure = null);

詳細については、Laravel Helpers Docsを確認してください。

于 2014-11-03T20:37:20.350 に答える