Әкімші генераторының доктринасының формасын өзгерту

Әкімші генераторының доктрина формасын өзгерту қажет:

$this->embedRelation('MyRelation');

Әдепкі орналасу келесідей:

Screenshot 1

Мақсат - таңдаудың әрбір элементі бөлек жолда мәтін ретінде көрсетілуі керек, сонымен қатар Бағасы мен саны:

Screenshot 2

schema.yml

Game:
    actAs:
      Timestampable: ~
    columns:
      id: { type: integer(4), primary: true, autoincrement: true, unsigned: true }
      game_name: { type: string(100), notnull: true }
    indexes:
      it:
  fields: game_name
  type: unique

  Campaign:
    actAs:
      Timestampable: ~
    columns:
      id: { type: integer(4), primary: true, autoincrement: true, unsigned: true }
      name: { type: string(100), notnull: true }
      is_active: { type: boolean, notnull: true, default: 0 }
      start: { type: datetime, notnull: true }
      end: { type: datetime, notnull: true }
    relations:
      CampaignMatrix: { onDelete: CASCADE, local: id, foreign: campaign_id, foreignAlias: CampaignMatrixCampaign }

  CampaignGames:
    actAs:
      Timestampable: ~
    columns:
      id: { type: integer(4), primary: true, autoincrement: true, unsigned: true }
      campaign_id: { type: integer(4), notnull: true, unsigned: true }
      game_id: { type: integer(4), notnull: true, unsigned: true }
    indexes:
      tc:
  fields: [campaign_id, game_id]
  type: unique
    relations:
      Campaign: { onDelete: CASCADE, local: campaign_id, foreign: id, foreignAlias: CampaignCampaignGames }
      Game: { onDelete: CASCADE, local: game_id, foreign: id, foreignAlias: GameCampaignGames }

  CampaignMatrix:
    actAs:
      Timestampable: ~
    columns:
      id: { type: integer(4), primary: true, autoincrement: true, unsigned: true }
      item_id: { type: integer(4), notnull: true, unsigned: true }
      campaign_id: { type: integer(4), notnull: true, unsigned: true }
      price_id: { type: integer(4), notnull: true, unsigned: true }
      quantity: { type: integer(4), notnull: true, unsigned: true }
    relations:
      Item: { onDelete: CASCADE, local: item_id, foreign: id, foreignAlias: ItemCampaignMatrix }
      Campaign: { onDelete: CASCADE, local: campaign_id, foreign: id, foreignAlias: CampaignCampaignMatrix }
      Price: { onDelete: CASCADE, local: price_id, foreign: id, foreignAlias: PriceItems }

  Price:
    columns:
      id: { type: integer(4), unsigned: true }
      currency_code: { type: string(3), notnull: true }
      price: { type: float, notnull: true }
    indexes:
      tc:
  fields: [id, currency_code]
  type: unique

  Item:
    actAs:
      Timestampable: ~
      I18n:
  fields: [name, description, image]
    columns:
      id: { type: integer(4), primary: true, autoincrement: true, unsigned: true }
      game_id: { type: integer(4), notnull: true, unsigned: true }
      product_id: { type: string(100), notnull: true }
      price_id: { type: integer(4), notnull: true, unsigned: true }
      quantity: { type: integer(4), notnull: true, unsigned: true }
      name: { type: string(100), notnull: true }
      description: { type: string(255), notnull: true }
      image: { type: string(255), notnull: true }
    indexes:
      it:
  fields: item_type
    relations:
      Game: { onDelete: CASCADE, local: game_id, foreign: id, foreignAlias: GameItems }
      Price: { onDelete: CASCADE, local: price_id, foreign: id, foreignAlias: PriceItems }

Міне, мен мұны істеймін:

$list = MainItemTable::getInstance()->findByGameId($gameId);

$CampaignMatrix = new CampaignMatrix();

foreach($list as $index => $item) {

    $itemAssocForm = new CampaignMatrixForm($CampaignMatrix);
    $itemAssocForm->item_id = $item->getId();//Need it in the form as hidden field
    $this->embedForm($item->getProductId(), $itemAssocForm);
}

Міне, мен құндылықты алуға тырысамын:

$this->widgetSchema['item_id'] = new sfWidgetFormInputText(array(), array('value' => $this->item_id));//It doesn't get the Id

Бірақ қате бар: Айтарлықтай қате: 30 секундта максималды орындау уақыты /vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Relation/Parser.php 237 жолдан асты

  1. Мен Price_id ба дарламасын CampaignMatrixForm ішінде шешсем, қате пайда болмайды. Цикл ішінде әрбір элементтің бірдей деректерін таңдауды орындауды қалай болдырмауға болады?
  2. Элемент идентификаторы жоқ, бірақ оны жасырын өріс ретінде қажет етеді. CampaignMatrixForm үшін CampaignMatrix ағымдағы жолдан қалай өту керек?
0
Мен өз сұрағымды жаңарттым ^
қосылды автор Roman Newaza, көзі
схемадан тиісті кестелерді орналастыра аласыз ба?
қосылды автор yitznewton, көзі

3 жауаптар

Қауымдастық нысанын негізгі нысанда күтуге бірігуіңіз керек. Егер сіз схеманың бір бөлігін орналастырсаңыз, онда ол оңай болады.

Бұл үзіндіді қайта қолдануға тырысыңыз:

$list = MyRelatedObjectTable::getInstance()->findAll();

foreach($list as $item)
{
  $itemAssoc = AssociationTable::getInstance()->findByObjectId($this->object->id, $item->id);

  if(!$itemAssoc)
  {
    $itemAssoc = new Association();
    $itemAssoc->value_id = $itemAssoc->id;
    $itemAssoc->user_id = $this->object->id;
  }

  $itemAssocForm = new AssociationForm($itemAssoc);
  $this->embedForm('itemAssoc'.$item->code, $itemAssocForm);
}
1
қосылды
Сонымен, сіз преференцияларға қалай қол жеткізесіз және user_id?
қосылды автор Roman Newaza, көзі
Бұл мүлдем күрделі емес ;-)
қосылды автор Roman Newaza, көзі
Мен өз пішініммен деректерді жаңарта алмадым, бірақ кірістіру ғана ... Кірістірілген элементтер енгізілген пішімде алдын-ала таңдалмады. Маған осындай нәрселерді жасау керек сияқты. Менің ойымша, AJAX көмектеседі.
қосылды автор Roman Newaza, көзі
Сіздің үлгіңіз тым күрделі болуы мүмкін ... CampaignGames-дағы CampaignMatrix-ті рефакторға айналдыруға тырысыңыз. Сіздің мақсатыңызға жету үшін, өзіңізді кедендік формаларды құру мен өңдеуге тереңдетуге тура келеді. Өзгертпелі пішін сыныбын жасаңыз, теңшелетін виджеттерді және виджеттіңSchema жүктеңіз. Өңдеу үшін, өзіңіздің допингіңізді жасаңыз және сіздің іліміңізді жаңарту үшін әдісті сақтаңыз. EmbedForm нашар конструкциядан зардап шегеді және сіздің мақсаттарыңызға сәйкес келмейді.
қосылды автор dxb, көзі

кэштен кодты ала аласыз және backend/modules/nameAPP және келесі өңдеу шаблонына көшуге болады

0
қосылды
бұл доктринаның нысаны. Менің ойымша, бұл жақсы жол.
қосылды автор Roman Newaza, көзі

Ең жақсы әдіс - бұл ішінара жасау. Сіз unset керек пе білесіздер, элементтің Таңдау пішіні Пішін сыныбында немесе сіз бірлестігіңізді жоғалтасыз. Егер сізге көбірек көмек керек болса, мен бұл туралы ойланамын.

0
қосылды
егер іс-қимыл жоспары осы салада ешқандай ақпарат алмаса (виджет көрсетілмесе), бос өрісті жіберу сияқты. Бұл мәнді тазартады. Бірақ болса, ең жақсы опция өрісті sfWidgetFormInputHidden -ге түрлендіреді, бұл қауымдастықты сақтап, мәннің жоғалуын болдырмайды.
қосылды автор samura, көзі
Элементті таңдауды белгілемеген болсам, неге қауымдастығым жоғалады?
қосылды автор Roman Newaza, көзі
Мен мәселені жаңарттым
қосылды автор Roman Newaza, көзі