Symfony2: вызов функции другого контроллера

#php #symfony

#php #symfony

Вопрос:

Структура каталогов

 AppBundle/api/CartController
  

Существует функция, определенная в CartController.php as onlinecoupontrancation($params) .

Мне нужно вызвать эту функцию из AppBundle/api/MerchantController.php . Я пытался

 $this->forward('AppBundle:api/Cart:onlinecoupontrancation', $param);
  

Но он выдает ошибку 404. Любая подсказка для этого? Заранее спасибо.

Ответ №1:

Если это общая функция для двух контроллеров, почему бы не создать общий класс обслуживания, который используют оба контроллера?

Например, CartFunctions.php

 <?php
// src/AppBundle/Classes/CartFunctions.php
namespace AppBundleClassesCartFunctions;

class CartFunctions
{
    
    public function __construct()
    {
        // optional DI of other things if required
    }
    
    private function onlinecoupontrancation($params)
    {
        $foo = true;
        // whatever you want to do

        return $foo;
    }
}
  

Создайте это как сервис, инструкции здесь
Что-то вроде;

app/config/services.yml

 services:
    cart.functions:
        class:        AppBundleCartFunctions
        arguments:    []
  

Итак, в ваших контроллерах;

 public function cartAction($params)
{
    // other stuff ...
    $cartFunctions = $this->get('cart.functions');
    $foo = $cartFunctions->onlinecoupontrancation($params);
}
  

Комментарии:

1. функция onlinecoupontrancation использует другую функцию cartcontroller.

2. @NituDhaka, я бы поместил все отношения функций в корзину в классе service, а затем вызывал функции только из этого класса. Если другая функция, на которую вы ссылаетесь, тоже предназначена только для функций корзины, поместите ее в класс, иначе верните нужные вам данные и продолжайте обработку по мере необходимости