将一个控制器中的函数调用到另一个控制器

时间:2020-03-09 08:28:53

标签: php laravel

我是Laravel的新手。我在PaymentController中有一些功能。我想从SmartpaySController调用这些函数。这是PaymentController中可用的功能。呆在SmartpaySController中,帮助我调用该函数。

public function getPaymentFailed($paymentId) {

        $transactionData = $this->paymentRepo->find($paymentId);
        if($transactionData) {
            $data['quote'] = $this->quoteRepo->getQuoteById($transactionData->quote_id);
            $data['metaTitle'] = 'Payment failed';
            $data['returnMessage'] = $transactionData->return_message;
            return view('payment::payment.quote_payment_failed', $data);
        }
}

谢谢。

4 个答案:

答案 0 :(得分:1)

更改:

public function getPaymentFailed($paymentId)

收件人:

public static function getPaymentFailed($paymentId)

这将通过以下操作使其在您的SmartpaySController中静态可用:

PaymentController::getPaymentFailed($paymentId);

答案 1 :(得分:1)

Instead of calling controller methods, the better practice is that you can create traits like: app/Traits  and extend in controller

// trait

trait traitName {

    public function getData() {
        // .....
    }
}

//控制器

class ControlelrName extends Controller {
     use TraitName;
}

答案 2 :(得分:0)

我建议您不要将功能从一个控制器调用到另一个控制器。 制作助手,资源或以其他方式实现相同功能

请勿将控制器用作对象

但是,如果您仍然想这样做,则可以使用:

SomeController.php
class SomeController extend Controller {
    public function someFunction(Request $request) {
        // Here Some Code
    }
}
YourController.php
use SomeController;
...
public function getPaymentFailed(Request $request, $paymentId) {
    $controller_data = (new SomeController)->someFunction($request);

    $transactionData = $this->paymentRepo->find($paymentId);
    if($transactionData) {
        $data['quote'] = $this->quoteRepo->getQuoteById($transactionData->quote_id);
        $data['metaTitle'] = 'Payment failed';
        $data['returnMessage'] = $transactionData->return_message;
        return view('payment::payment.quote_payment_failed', $data);
    }
}

答案 3 :(得分:0)

您可以使用 Real-Time Facades

使用实时外观,您可以在应用程序中处理任何类 仿佛是外墙。

要生成实时外观,请为导入的名称空间添加前缀 外墙课程:

//...

use use Facades\App\Http\Controllers\SomeController;

//...

return SomeController::getPaymentFailed($request, $paymentId);
相关问题