Symfony Model в контролере!

webplus

Новичок
Здравствуйте!
Можно ли в Symfony логику базы данных поместить в модель.
Что бы было примерно:
Код:
class DefaultController extends Controller
{
    public function indexAction($name)
    {
    $model = new Model;
    $data = $model->getData();
    print_r($data);
    }
}
 

keltanas

marty cats
А в чем суть вопроса? Хочешь, получить разрешение? Или хочешь узнать, как это сделать в Symfony?
Так в sf2 нет моделей. Каждый сам решает, как ему работать с базой данных?
 

webplus

Новичок
А в чем суть вопроса? Хочешь, получить разрешение? Или хочешь узнать, как это сделать в Symfony?
Так в sf2 нет моделей. Каждый сам решает, как ему работать с базой данных?
Хочу узнать как это сделать. Если можно посмотреть как это реализовать? В инете искал что то подобное так и не нашел
 

keltanas

marty cats
Находишь библиотеку, реализующую нужный интерфейс (или пишешь свою), и делаешь.
Например так:
PHP:
<?php
class Model
{
    function getData()
    {
    }
}
$model = new Model();
print_r($model->getData());
А при чем тут Symfony?
 

webplus

Новичок
Я думал что в Symfony можно вынести логику базы данных в модель, и в контролере уже пользоваться этой моделью
 

hell0w0rd

Продвинутый новичок
webplus, ты какую логику-то хочешь вынести?)
Вот тебе логика в модели:
PHP:
    public function getRegularEvents()
    {
        foreach ($this->getEvents() as $event) {
            if ($event->isRegular()) {
                yield $event;
            }
        }
    }
Ты пример покажи, чего хочешь, а мы тебе подскажем. Напримем взаимодействие с базой прямое у тебя в модели не получится, зато можно его описать в репозитории.
 

webplus

Новичок
Я хочу создать модель, и в ней реализовать операцию с таблицей, например сохранение.
Код:
class Model
{
    function save()
    {
    $category = new Test1();
    $category->setName('Main Products');
    $em = $this->getDoctrine()->getManager();
    $em->persist($category);
    $em->flush();
    }
}
Затем в контролере:
Код:
class DefaultController extends Controller
{
    public function indexAction($name)
    {
    $model = new Model();
    $model->save();
    }
}
Для чего я это хочу сделать, для того если у меня в разных Экшенах(Action) будет повторятся логика, чтоб мне каждый раз не писать логику, а просто вызывать из модели функцию
 

keltanas

marty cats
webplus, это ты не в Symfony хочешь логику базы данных. Это ты хочешь реализацию паттерна ActiveRecord.
Такой реализацией может являться библиотека Propel

А то был один товарищ, который хотел доктрину как AR использовать, а контейнер как Yii::app() и после того сильно матерился.

Сначала стоит изучить матчасть, понять свои задачи а потом уже браться.
Тогда не будет глупых вопросов.
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Ты можешь сделать так:
PHP:
<?php

class Model
{
    private $id;
    private $name;

    public function __construct($name)
    {
        $this->setName($name);
    }

    public function getId()
    {
        return $this->id;
    }

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

class AppContoller extends Controller
{
    protected function saveEntity($object)
    {
        $om = $this->getDoctrine()->getManager();
        $om->persist($object);
        $om->flush();
    }

    protected jsonResponse($data)
    {
        return new JsonResponse($data);
    }
}

class DefaultController extends \AppController
{
    public function indexAction($name)
    {
        $model = new Model($name);
        $this->saveEntity($model);

        return $this->jsonResponse(['id' => $name->getId()])
    }
}
Переходи на сторону симфони, у нас есть печеньки:)
 
Сверху