Где писать пользовательские функции и как их импортировать?

Вот моя маленькая история: я использую дерево DoctrinExtensions в моей учетной записи лица. Пользователь может редактировать дерево в пользовательском интерфейсе, а затем сохранить его. Я возвращаю обратно в PHP массив всех учетных записей. Затем я хочу перестроить его в виде дерева и сохранить / отредактировать учетные записи с помощью методов расширения.

Поэтому я хочу сравнить возвращаемый массив пользовательского интерфейса с моим исходным деревом из БД. Я получаю данные, делая что-то вроде этого:

$repo = $em->getRepository('NRtworksChartOfAccountsBundle:Accounttree');
$arrayTree = $repo->findAll(); 

Итак, у меня есть дерево в массиве. Теперь я хочу найти объект в этом массиве по его идентификатору. Я знаю, как написать функцию, но в MVC я не знаю, в каком месте можно написать и вызвать ее, и не является ли это правильным способом.

Я попытался создать папку "Модель" и файл Functions.php, например:

 namespace NRtworks\ChartOfAccountsBundle\Model;

 function get_account_from_id($array)
 {
    return "true";    
 }

а затем позвонить с моего контроллера

use NRtworks\ChartOfAccountsBundle\Model\Functions;
get_account_from_id($arrayTree);

Но это не работает. Посоветуйте, пожалуйста, как мне это сделать и есть ли более правильный путь в рамках идеи MVC.

Спасибо

2 ответа

Решение

Вы должны написать собственный сервис и поместить логику внутрь. Док: http://symfony.com/doc/current/book/service_container.html

ОБНОВЛЕНИЕ (пример кода):

Служба настройки Les в контейнере:

# app/config/config.yml
services:
    your_service:
        class:        NRtworks\ChartOfAccountsBundle\Service\YourService

Теперь ваш класс обслуживания:

namespace NRtworks\ChartOfAccountsBundle\Service;

class YourService {
    public function getAccountFromId(array $array)
    {
        return "true";
    }
}

Теперь вы можете получить эту услугу из контейнера, как:

class SomeController extends Controller {
    public function someMethod() {
        $yourService = $this->get('your_service');
    }
}

Вы даже можете добавить свой класс репозитория в эту службу, например:

# app/config/config.yml
services:
    app.accounTtree.repository:
        class:           Doctrine\ORM\EntityRepository
        factory-service: doctrine.orm.entity_manager
        factory-method:  getRepository
        arguments: 
            - "App\MainBundle\Entity\Gallery"

    your_service:
        class:        NRtworks\ChartOfAccountsBundle\Service\YourService
        calls: 
            - [ setRepository, ["@app.accounTtree.repository"]]

и просто измените ваш сервис:

namespace NRtworks\ChartOfAccountsBundle\Service;

class YourService {
    protected $repository;

    public class setRepository($repository) {
        $this->repository = $repository;
    }

    public function getAccountFromId(array $array)
    {
        return "true";
    }
}

Если мы говорим о пользовательской обработке данных, извлеченной из доктрины, то, возможно, лучше использовать класс репозитория. Он предназначен для такой цели.

Другие вопросы по тегам