Вызов функции из одного контроллера в другой контроллер - PullRequest
0 голосов
/ 09 марта 2020

Я новичок в 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 ]

1 голос
/ 09 марта 2020

Измените:

public function getPaymentFailed($paymentId)

на:

public static function getPaymentFailed($paymentId)

Это сделает его статически доступным в вашем SmartpaySController, выполнив:

PaymentController::getPaymentFailed($paymentId);
1 голос
/ 09 марта 2020
Instead of calling controller methods, the better practice is that you can create traits like: app/Traits  and extend in controller

// черта

trait traitName {

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

// Контроллер

class ControlelrName extends Controller {
     use TraitName;
}
0 голосов
/ 09 марта 2020

Вы можете использовать Фасады в реальном времени

Используя фасады в реальном времени, вы можете рассматривать любой класс в вашем приложении, как если бы он были фасадом.

Чтобы сгенерировать фасад в реальном времени, добавьте перед пространством имен импортируемого класса фасады:

//...

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

//...

return SomeController::getPaymentFailed($request, $paymentId);
0 голосов
/ 09 марта 2020

Я рекомендую вам не вызывать функции с одного контроллера на другой. Создание помощников, ресурсов или реализация той же функции другим способом

Никогда не используйте контроллеры в качестве объекта

Но если вы все равно хотите это сделать, вы можете использовать:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...