在Paypal支付验证期间,从另一个控制器调用Laravel函数


Laravel call function from another controller during validation for Paypal payment

我有一个注册表单(这里使用Laravel 5),它在提交时调用BusinessController@postRegister

public function postRegister(Requests'RegisterBusinessRequest $request)
{
#1. get input, fill new class and save to database
#2. call PayPayController@postBusinessProvider
}

我要做的是调用我的PayPalController函数来处理支付,我已经尝试过return Redirect::action('PayPalController@postBusinessProvider');,但这似乎不起作用。

我是否必须简单地创建一个路由来从另一个控制器调用一个函数,或者有没有其他方法不创建路由?或者我应该把我的PayPal代码放在postRegister函数中,我想更干净地分开?

在MVC模型(和Laravel)中,一个控制器不会在一个请求中调用另一个控制器。为了简化控制器业务,您可以使用以下两个选项之一:

选项1

将控制器逻辑拆分成几个小部分,每个小部分用同一控制器类的privateprotected方法求解。所以你的控制器会是这样的:

public function postRegister(Requests'RegisterBusinessRequest $request)
{
    $this->_validateInput();
    $this->_processInput();
    $this->_doWithPaypal();
}

选项2

创建一个存储库类并删除这里所有复杂的逻辑。在控制器方法中,获取存储库实例并将输入数据作为该实例方法的参数传递。你可以在zizaco/confide package中看到一个例子。你的控制器会像这样:

public function postRegister(Requests'RegisterBusinessRequest $request)
{
    $repo = App::make('PaypalRepositoryClass');
    // process your input
    // ...
    // ...
    $repo->paypalBusiness($data);
}