Pomm Twig и родственники
Для проекта, который я использую pommbundle, он идеально подходит для создания сущностей с существующей базой данных.
В моем контроллере:
$catalogues = $this->get('pomm')['my_db1']
->getModel('\AppBundle\Entity\MyDb1\PublicSchema\CatalogueModel')
->findAll();
return this->render(
'SiteBundle:Default:homePage.html.twig',
array('catalogues'=>$catalogues));
Но как я могу получить доступ к переменной внутри моего представления (Twig
)
{% for catalogue in catalogues %}
{{dump(catalogue)}} --> value inside
{% endfor %}
Дамп результата
Catalogue {#1132 ▼
#container: array:13 [▼
"ID" => 8
"Code" => "MATIÈRE PREMIÈRE"
"Actif" => true
"DateAjout" => DateTime {#1212 ▶}
"Index" => 0
"PriseCommande" => false
"Description" => ""
"Couleur" => "Green"
"CouleurText" => "#000000"
"Tarif" => null
"WebActif" => false
"WebTitre" => null
"WebDescription" => null ]
-status: 1 }
catalogue.ID
(не работает) catalogue.container.ID
(не работает) с catalogue.get('ID') работает, но это лучший способ?
Другой вопрос
Если моя сущность имеет отношение, например, WebActif -> relation with another table
Как получить доступ к Webactif, потому что дамп возвращает только идентификатор. Я должен создать свой собственный метод?
Можно ли показать базовый пример?
1 ответ
Model::findAll
Метод возвращает итератор результатов базы данных. Когда этот итератор пройден, он возвращает сущности, заполненные преобразованными значениями.
Примечание: вам лучше не использовать заглавные буквы в именах столбцов, так как это приведет к путанице и не будет работать должным образом с гибкими объектами Pomm. (то же самое относится и к именам таблиц).
<dl>
{% if catalogues.isEmpty() %}
<dt>No results found.</dt>
{% else %}
<dt>There are {{ catalogues.count() }} results:</dt>
{% for catalogue in catalogues %}
<dd>{{ catalogue.code }} (added the {{ catalogue.date_ajout.format('d-m-Y') }}){% if catalogue.actif %} OK {% endif %}</dd>
{% endfor %}
{% endif %}
</dl>
Изменить: так как ваш комментарий говорит, что ваша база данных содержит имена столбцов с заглавными буквами, здесь дополнительное объяснение того, как работают гибкие объекты.
(Официальная документация о гибких юридических лицах здесь)
Когда гибкий объект гидратируется значениями итератора, они преобразуются и затем помещаются со своим именем в объекте. Вот почему вы можете использовать универсальный аксессор $entity->get('MyColumn')
потому что ключи сохранились.
Но гибкие существа - странные звери, потому что они могут меняться в зависимости от SELECT
который решает данные, отправленные им. Когда такая сущность создается, геттеры и сеттеры создаются практически с использованием PHP __get
а также __set
а также __call
функции.
Это может показаться странным, но посмотрите на этот пример:
<?php
$entity = new MyEntity(['first_name' = 'John', 'last_name' => 'Doe']);
$entity['first_name']; // calls $entity->getFirstName() which defaults to $this->get('first_name');
Затем можно переопределить средства доступа по умолчанию:
<?php
class MyEntity extends FlexibleEntity
{
/*
* Triggered by $entity['first_name']
* or $entity->first_name
*/
public function getFirstName(): string
{
return uc_words($this->get('first_name'));
}
public function getLastName(): string
{
return strtoupper($this->get('last_name'));
}
public function getName(): string
{
return sprintf("%s %s", $this->getFirstName(), $this->getLastName());
}
}
Тогда в веточку можно просто сделать {{ entity.name }}
вызвать getName
функция.
Как видите, имена столбцов имеют верблюжий корпус для создания виртуальных средств доступа, эту операцию можно отменить только в том случае, если исходные имена столбцов находятся в нижнем регистре.