我有一个注册表单(这里使用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
将控制器逻辑拆分成几个小部分,每个小部分用同一控制器类的private
或protected
方法求解。所以你的控制器会是这样的:
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);
}