如何在showmction中将editAction的逻辑放在Symfony 2 Doctrine生成的CRUD中?

时间:2015-12-15 15:09:46

标签: php entity-framework symfony doctrine-orm doctrine

我有一个Symfony 2项目,Doctrine为某些数据库实体生成了CRUD(由'app / console doctrine:generate:crud'生成)。在我的具体情况下,我有像TariffMc,TariffMcServiceMcRelation这样的实体。一个TariffMc实体可以属于许多TariffMcServiceMcRelation。

我有一个针对TariffMc的showAction,默认为此操作代码生成。我想列出属于此TariffMc实体的所有TariffMcServiceMsRelation。

我能够对showAction for TariffMc进行一些更改,因此此页面现在呈现TariffMc实体AND所有与此实体TariffMcServiceMcRelation实体相关的内容。我尝试了很多次,但是我无法获得最终结果,我需要:我需要为TariffMc渲染showAction的结果,并且下面必须有与此TariffMc TariffMcServiceMcRelation实体相关的所有内容,并且可以编辑和删除每个TariffMcServiceMcRelation实体。同一页。

所以,我现在拥有的:

enter image description here

我需要的是最终结果,粗略地说:

enter image description here

TariffMc'show'模板:

{% extends 'menu.html.twig' %}

{% block content %}
<h1>TariffMc</h1>

<table class="record_properties" border="1">
    <tbody>
        <tr>
            <th>ID</th>
            <td>{{ entity.id }}</td>
        </tr>
        <tr>
            <th>Партнер</th>

<td>{{ entity.user }}</td>
        </tr>
        <tr>
            <th>Хэш</th>
            <td>{{ entity.hash }}</td>
        </tr>
        <tr>
            <th>URL для уведомлений о статусах платежей</th>
            <td>{{ entity.notificationUrl }}</td>
        </tr>
    </tbody>
</table>

    <ul class="record_actions">
<li>
    <a href="{{ path('system_settings_mc_tariffs') }}">
        Back to list
    </a>
</li>
<li>
    <a href="{{ path('system_settings_mc_tariffs_edit', { 'id': entity.id }) }}">
        Edit
    </a>
</li>
<li>{{ form(delete_form) }}</li>
</ul>

{# Вывод в таблице всех записей из таблицы tariff_mc_service_mc_relation, которые относятся к данному тарифу #}
<h1>TariffMcServiceMcRelation</h1>
{% if relations %}
    <table class="records_list" border="1">
        <thead>
        <tr>
            <th>Оператор</th>
            <th>ID сервиса</th>
            <th>Стандартный успешный ответ на запрос КП</th>
            <th>description</th>
            <th>Комиссия</th>
            <th>Фильтр</th>
        </tr>
        </thead>
        <tbody>
        {% for relation in relations %}
            <tr>
                <td>{{ relation.operator }}</td>
                <td>{{ relation.id }}</td>
                <td>{{ relation.successMessage }}</td>
                <td>{{ relation.description }}</td>
                <td>{{ relation.commission }}</td>
                <td>{{ relation.filter }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
{% else %}
    Нет отчислений для операторов
{% endif %}

<ul>
    <li>
        <a href="{{ path('system_settings_mc_tariff_mc_service_mc_relation_new') }}">
            Create TariffMcServiceMcRelation
        </a>
    </li>
</ul>
{% endblock %}

TariffMcServiceMcRelation'编辑'模板:

<h1>TariffMcServiceMcRelation edit</h1>

{{ form(edit_form) }}

    <ul class="record_actions">
<li>
    <a href="{{ path('system_settings_mc_tariff_mc_service_mc_relation') }}">
        Back to list
    </a>
</li>
<li>{{ form(delete_form) }}</li>

TariffMc showAction:

public function showAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('AppBundle:TariffMc')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find TariffMc entity.');
    }

    $deleteForm = $this->createDeleteForm($id);

    return array(
        'entity'      => $entity,
        'delete_form' => $deleteForm->createView(),
    );
}

我需要为TariffMc修改 showAction()以及为TariffMc修改显示模板,以便获得我需要的结果?

1 个答案:

答案 0 :(得分:0)

为什么要尝试制作混合节目/编辑页面?显示应该只显示数据,编辑应该只编辑数据。

执行您要做的事情的功能已经存在: https://sonata-project.org/bundles/admin/master/doc/reference/form_types.html#sonata-type-collection

在configureFormFields中:

$formBuilder
    ->add('foobarRelationName', 'sonata_type_collection', array(),
        array(
            'edit' => 'inline',
            'inline' => 'table',
        ))

请注意,可通过此方式编辑许多相关实体会对性能和内存使用产生重大影响。

编辑:我发现奏鸣曲文档难以使用且缺乏信息。试图纠缠奏鸣曲字段类型以你想要的关系工作时,试验和错误以及大量的stackoverflow搜索是你的朋友。