Где писать пользовательские функции и как их импортировать?
Вот моя маленькая история: я использую дерево 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";
}
}
Если мы говорим о пользовательской обработке данных, извлеченной из доктрины, то, возможно, лучше использовать класс репозитория. Он предназначен для такой цели.