我能够使用可重复使用的postPayment()
方法实施PaypalController
,该方法接受商品及其价格,创建Paypal付款并重定向到Paypal付款页面。从另一个控制器调用Controller是Laravel的一个良好实践吗?
class PaypalController extends Controller {
private static $_api_context;
private static function initialize() {
//initialize api context
}
public static function postPayment($items, $currency, $description) {
self::initialize();
//create item list, transaction, payment objects, etc
$payment->create(PaypalController::$_api_context);
...
return redirect()->away($redirect_url); // redirect to paypal
}
}
PaypalController
被其他控制器静态调用。例如,AuthController
可以称之为用户注册到我的网站后,有权要求用户付款:
class AuthController extends Controller {
public function postRegister(Request $request) {
return PaypalController::postPayment($items, 'JPY', 'description');
}
}
基本上,PaypalController
返回Redirect
到AuthController
,这也返回它,执行重定向到Paypal付款页面。
我想知道这是不是一个好的设计 - 一个控制器调用不同的控制器,是吗?
如果不是,那么更好的方法是什么?也许将我的代码从PaypalController移动到自定义服务提供程序,或者自定义助手或其他东西?我对Laravel很新,我希望能有一些指导。
我为什么要使用界面?如果我在这种特殊情况下使用接口,恐怕我可能会过度工程。 – Obay
这是解耦业务逻辑的正确/最佳实践,也就是说:编程到接口,而不是具体实现。换句话说,对抽象类型(接口)的依赖使得双方不会紧密地解耦,并且即使在不改变应用程序逻辑的情况下也可以调用依赖关系。但就像我说的那样,做你认为对自己更好的事情,不要遵循任何规则,直到你意识到需要,直到你理解为止。无论如何,它带来了话题。 –
此外,[检查此](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=program%20to%20an%20interface%20not%20an%20实施) 。 –