Задайте значение для amountToRelad var, чтобы к нему можно было получить доступ любым методом в классе

Я работаю в 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() метод этот var не должен держать это установленное значение? Почему поступает NULL или без значений? Я новичок в Laravel из Symfony. Каков наилучший способ сохранить значение var, чтобы я мог без проблем использовать его во всем классе?

В качестве второй части этого поста мне нужно создать правильный маршрут для cancelPayment() метод и это пойдет по этой строке:

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

Как мне создать действительный URL с, возможно, параметрами, в Laravel? с помощью URL-помощника? Используя Маршрут? Который из?

0

Решение

Ваш подход хорош, потому что amountToReload объявлен как свойство класса (хотя вы можете сделать это свойство protected если вы явно не хотите сделать его общедоступным). Единственная проблема заключается в том, что метод onAmountChange() нужно позвонить раньше onRun()для того, чтобы установить значение amountToReload,

Что касается генерации URL-адресов, то проще всего использовать url():

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

Для получения дополнительной информации проверьте Документы Помощников Ларавела.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]