Я работаю в 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-помощника? Используя Маршрут? Который из?
Ваш подход хорош, потому что amountToReload
объявлен как свойство класса (хотя вы можете сделать это свойство protected
если вы явно не хотите сделать его общедоступным). Единственная проблема заключается в том, что метод onAmountChange()
нужно позвонить раньше onRun()
для того, чтобы установить значение amountToReload
,
Что касается генерации URL-адресов, то проще всего использовать url()
:
url('foo/bar', $parameters = array(), $secure = null);
Для получения дополнительной информации проверьте Документы Помощников Ларавела.
Других решений пока нет …