Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Multi value não é salvo os itens do combo Ola, Pessoal, Estou com o seguinte problema, ao clicar em salvar os valores (id 's ) não são salvos, alguém pode me ajudar a identificar resolver o problema ? Segue código abaixo ...
RB
Multi value não é salvo os itens do combo  
Ola, Pessoal,

Estou com o seguinte problema, ao clicar em salvar os valores (id 's ) não são salvos, alguém pode me ajudar a identificar resolver o problema ?

Segue código abaixo

  1. <?php
  2. class ClienteFisicoBuilder extends TPage
  3. {
  4.    private $form;
  5.  
  6.     public function __construct()
  7.     {
  8.         parent::__construct();
  9.         
  10.         $this->form = new BootstrapFormBuilder('frm_cliente_fisico');
  11.         $this->form->setFormTitle('Cliente');
  12.         $this->form->style='font-family:Arial Narrow;';
  13.         // define the CSS class
  14.         //$this->form->class='tdatagrid_table customized-table';
  15.         // import the CSS file
  16.        // parent::include_css('app/resources/custom-table.css');
  17.                         
  18.         $dados_cliente = new TLabel('Dados Pessoais''#1F4E78'12'b');
  19.         $dados_cliente->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;float:left;margin-top:-20px;font-family:Arial Narrow;';
  20.         $this->form->addContent( [$dados_cliente] );
  21.         
  22.         // add a row with 2 slots
  23.         //$label_id = new TLabel('Id','#1F4E78');
  24.        // $label_id->style='text-align:left;float:left;';
  25.         
  26.         //div container para ajustar os label e campos
  27.         $div_nome = new TElement("span");
  28.         $div_nome->style="background-color=red;width:240px;";
  29.         
  30.         $label_nome = new TLabel('Nome','#1F4E78');
  31.         $label_nome->style='text-align:left;float:left;font-family:Arial Narrow;';
  32.         
  33.         
  34.         
  35.         $lbl_data_nascto = new TLabel('Data Nascimento','#1F4E78');
  36.         $lbl_data_nascto->style='text-align:left;float:left;font-family:Arial Narrow;';
  37.         
  38.         $lbl_estado_civil = new TLabel('Estado Cívil','#1F4E78');
  39.         $lbl_estado_civil->style='text-align:left;float:left;font-family:Arial Narrow;';
  40.         
  41.        // $id = new TEntry('id');
  42.        // $id->style='text-align:left;float:left;';
  43.                 
  44.         $nome = new TEntry('nome');
  45.         $nome->style='text-align:left;float:left;';
  46.         $nome->addValidation('Data Nascimento', new TRequiredValidator);
  47.         
  48.         $data_nascimento = new TDate('data_nascimento');
  49.         $data_nascimento->addValidation('Data Nascimento', new TRequiredValidator);
  50.         $data_nascimento->style='text-align:left;float:left;';
  51.         $data_nascimento->setMask('dd/mm/yyyy'); // define date mask
  52.         //$data_nascimento->setDatabaseMask('yyyy-mm-dd');
  53.         
  54.         $estado_civil = new TDBCombo('estado_civil_id','sgvo''Civil''id''descricao');
  55.         $estado_civil->setDefaultOption(false);
  56.         
  57.         $lbl_genero = new TLabel('Genero','#1F4E78');
  58.         $lbl_genero->style ='text-align:left;float:left;width:100%;font-family:Arial Narrow;';
  59.         
  60.         $genero_id = new TCombo('genero_id');
  61.         $genero_id->addItems( ['1' => 'Masculino''2' => 'Feminino'] );
  62.         $genero_id->setDefaultOption(false);
  63.                 
  64.         $lbl_cpf = new TLabel('CPF','#1F4E78');
  65.         $cpf = new TEntry('cpf');
  66.         $cpf->setMask('000.000.000.00');
  67.         $cpf->addValidation('CPF', new TCPFValidator, new TMaxValueValidator,array(14));
  68.         //$cpf->setDatabaseMask('00000000000');
  69.         $lbl_cpf->style='text-align:left;float:left;font-family:Arial Narrow;';
  70.         
  71.         $lbl_rg = new TLabel('RG','#1F4E78');
  72.         $rg = new TEntry('rg');
  73.         $rg->setMask('00.000.000.00');
  74.         $rg->setMaxLength(12);
  75.         $lbl_rg->style='text-align:left;float:left;font-family:Arial Narrow;';
  76.         
  77.         /*
  78.         $lbl_cnh = new TLabel('CNH','#1F4E78');
  79.         $cnh = new TEntry('cnh');
  80.         $cnh->setMask('00.000.000.00');
  81.         $cnh->setMaxLength(12);
  82.         $lbl_cnh->style='text-align:left;float:left;';
  83.         */
  84.         
  85.         
  86.         $lbl_etnia = new TLabel('Etnia','#1F4E78');
  87.         $etnia_id = new TDBCombo('etnia_id','sgvo','Etnia','id','descricao');
  88.         $etnia_id->setDefaultOption(false);
  89.                 
  90.        // $this->form->addFields( [$label_id,$id] );        
  91.         $this->form->addFields( [$label_nome,$lbl_data_nascto,$lbl_estado_civil] );
  92.         $this->form->addFields( [$nome,$data_nascimento,$estado_civil] );
  93.         $this->form->addFields( [$lbl_genero,$lbl_etnia,$lbl_cpf,$lbl_rg] );
  94.         $this->form->addFields( [$genero_id,$etnia_id,$cpf,$rg] );
  95.         
  96.         //dados de contato
  97.         $contato = new TLabel('Contato''#1F4E78'12'b');
  98.         $contato->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  99.         
  100.         $lbl_ddi = new TLabel('DDI','#1F4E78');
  101.         $lbl_ddi->style='text-align:left;font-family:Arial Narrow;';
  102.         $ddi = new TEntry('ddi[]');
  103.         
  104.         $lbl_dd = new TLabel('DDD','#1F4E78');
  105.         $lbl_dd->style='text-align:left;font-family:Arial Narrow;';
  106.         $dd = new TEntry('dd[]');
  107.         
  108.         $lbl_tipo_telefone = new TLabel('Tipo Telefone','#1F4E78');
  109.         $lbl_tipo_telefone->style='text-align:left;font-family:Arial Narrow;';
  110.         $tipo_telefone_id = new TDBCombo('TipoTelefone','sgvo','TipoTelefone','id','descricao');
  111.         $tipo_telefone_id->setDefaultOption(false);
  112.         
  113.         $lbl_telefone = new TLabel('Telefone','#1F4E78');
  114.         $lbl_telefone->style='text-align:left;font-family:Arial Narrow;';
  115.         $telefone = new TEntry('telefone[]');
  116.         $telefone->setMask('9999-9999');
  117.                         
  118.         $lbl_operadora = new TLabel('Operadora','#1F4E78');
  119.         $lbl_operadora->style='text-align:left;font-family:Arial Narrow;';
  120.         $operadora_id = new TDBCombo('Operadora','sgvo','Operadora','id','nome');
  121.         $operadora_id->setDefaultOption(false);
  122.         
  123.         $lbl_email = new TLabel('Email','#1F4E78');
  124.         $lbl_email->style='text-align:left;;font-family:Arial Narrow;';
  125.         $email = new TEntry('email');
  126.         //$email->addValidation('email', new TEmailValidator); // email field
  127.         
  128.         $lbl_site = new TLabel('Site','#1F4E78');
  129.         $lbl_site->style='text-align:left;font-family:Arial Narrow;';
  130.         $site = new TEntry('site');
  131.         $this->form->addContent( [$contato] );
  132.         
  133.         //adiciona campos para contato / telefone
  134.         $table = new TTable;
  135.         $table->style='border 1px solid #333;font-family:Arial Narrow;';
  136.         $table->width='100%';
  137.         $table->addSection('thead');
  138.         $table->addRowSet([$lbl_ddi,$lbl_dd,$lbl_tipo_telefone,$lbl_telefone,$lbl_operadora]);       
  139.         $table->addSection('tbody');
  140.         
  141.         for ($n=0$n<=0$n++)
  142.         {
  143.             // create delete button
  144.             $del = new TImage('fa:trash-o blue');
  145.             $del->onclick 'ttable_remove_row(this)';
  146.             
  147.             // create add button
  148.             $add = new TButton('clone');
  149.             $add->setLabel('Adicionar');
  150.             $add->setImage('fa:plus-circle green');
  151.             $table->addRowSet( [$ddi,$dd,$tipo_telefone_id,$telefone,$operadora_id$del]);
  152.             
  153.         }
  154.         $add->addFunction('ttable_clone_previous_row(this)');
  155.         $table->addRowSet($add);
  156.         $this->form->addFields( [$table]);
  157.         
  158.         $this->form->addFields( [ $lbl_email,$lbl_site] );
  159.         $this->form->addFields( [ $email,$site] );
  160.         
  161.         //dados de correspondência
  162.         $lbl_endereco = new TLabel('Endereco''#1F4E78'12'b');
  163.         $lbl_endereco->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  164.         
  165.         $lbl_cep = new TLabel('Cep''#1F4E78');
  166.         $lbl_cep->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  167.         $cep = new TEntry('cep');
  168.         $cep->addValidation('CEP', new TRequiredValidator, new TMaxValueValidator,array(8));
  169.                 
  170.         $lbl_logradouro = new TLabel('Logradouro''#1F4E78');
  171.         $lbl_logradouro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  172.         $logradouro = new TEntry('logradouro');
  173.         $logradouro->style='float:left;';
  174.         $logradouro->addValidation('Logradouro', new TRequiredValidator);
  175.         
  176.         $lbl_numero = new TLabel('Número''#1F4E78');
  177.         $lbl_numero->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  178.         $numero = new TEntry('numero');
  179.         $numero->addValidation('Número', new TRequiredValidator);
  180.         
  181.         $lbl_bairro = new TLabel('Bairro''#1F4E78');
  182.         $lbl_bairro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  183.         $bairro = new TEntry('bairro');
  184.         $bairro->addValidation('Bairro', new TRequiredValidator);
  185.         
  186.         $lbl_cidade = new TLabel('Cidade''#1F4E78');
  187.         $lbl_cidade->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  188.         $cidade = new TEntry('cidade');
  189.         $cidade->addValidation('Cidade', new TRequiredValidator);
  190.         
  191.         $lbl_uf = new TLabel('Estado''#1F4E78');
  192.         $lbl_uf->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  193.         $uf = new TEntry('uf');
  194.         $uf->addValidation('Estado', new TRequiredValidator);
  195.         
  196.         $lbl_complemento = new TLabel('Complemento''#1F4E78');
  197.         $lbl_complemento->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  198.         $complemento = new TEntry('complemento');
  199.         
  200.         $label_nome->setSize('40%');
  201.         $nome->setSize('40%');
  202.         $lbl_data_nascto->setSize('20%');
  203.         $data_nascimento->setSize('20%');
  204.         $lbl_estado_civil->setSize('20%');
  205.         $estado_civil->setSize('20%');
  206.         $lbl_genero->setSize('20%');
  207.         $genero_id->setSize('20%');
  208.         $lbl_cpf->setSize('20%');
  209.         $cpf->setSize('20%');
  210.         $lbl_rg->setSize('20%');
  211.         $rg->setSize('20%');
  212.         //$lbl_cnh->setSize('19%');
  213.         //$cnh->setSize('19%');
  214.         
  215.         $lbl_etnia->setSize('20%');
  216.         $etnia_id->setSize('20%');
  217.         $lbl_ddi->setSize('40');
  218.         $ddi->setSize('40');
  219.         $lbl_dd->setSize('40');
  220.         $dd->setSize('40');
  221.         $lbl_tipo_telefone->setSize('100');
  222.         $tipo_telefone_id->setSize('100');
  223.         $lbl_telefone->setSize('100');
  224.         $telefone->setSize('100');
  225.         $operadora_id ->setSize('100');
  226.         $lbl_email->setSize('40%');
  227.         $lbl_site->setSize('40%');
  228.         $email->setSize('40%');
  229.         $site->setSize('40%');
  230.         $lbl_cep->setSize('28.5%');
  231.         $cep->setSize('20%');
  232.         $lbl_logradouro->setSize('40%');        
  233.         $logradouro->setSize('40%');
  234.         $lbl_numero->setSize('20%');
  235.         $numero->setSize('20%');
  236.         $lbl_bairro->setSize('20%');
  237.         $lbl_cidade->setSize('32%');
  238.         $lbl_uf->setSize('8%');
  239.         $bairro->setSize('20%');
  240.         $cidade->setSize('32%');
  241.         $uf->setSize('8%');
  242.         $lbl_complemento->setSize('20%');
  243.         $complemento->setSize('20%');
  244.         
  245.         $btn_cep = new TButton('btn_cep');
  246.         $btn_cep->setSize(100);
  247.         $btn_cep->style='float:left;padding-rigth:10px;color:#1F4E78';
  248.         $btn_cep->setAction(new TAction(array($this,'onCep')),'Busca Cep');
  249.         
  250.         $btn_cep->setImage('fa:search blue');
  251.         
  252.         $this->form->addFields( [$lbl_endereco] );
  253.         $this->form->addFields( [$lbl_cep,$lbl_logradouro,$lbl_numero] );
  254.         $this->form->addFields( [$cep,$btn_cep,$logradouro,$numero] );
  255.         $this->form->addFields( [$lbl_bairro,$lbl_cidade,$lbl_uf,$lbl_complemento] );
  256.         $this->form->addFields( [$bairro,$cidade,$uf,$complemento] );
  257.                 
  258.         $this->form->addAction('Salvar', new TAction(array($this'onSave')), 'ico_save.png');
  259.         
  260.         // wrap the page content using vertical box
  261.         $vbox = new TVBox;
  262.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  263.         $vbox->add($this->form);
  264.         parent::add($this->form);
  265.     }
  266.     
  267.     /**
  268.      * Post data
  269.      */
  270.    function onSave($param){
  271.            $organizacao_id TSession::getValue('organizacion_id'); // pega id da empresa
  272.            $atualizacao date('Y-m-d H:m:s');
  273.        try
  274.         {
  275.             TTransaction::open('centinel'); // open a transaction
  276.             
  277.             $data $this->form->getData(); // get the form data into an active record Pessoa
  278.             $pessoa = new Pessoa;
  279.             $pessoa->fromArray((array) $data);
  280.             $this->form->validate();// form validation
  281.             
  282.             /**
  283.             // Enable Debug logger for SQL operations inside the transaction
  284.             TTransaction::setLogger(new TLoggerSTD); // standard output
  285.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  286.             **/
  287.             
  288.             $pessoa->nome            $data->nome;
  289.             $pessoa->data_nascimento TDate::date2us($data->data_nascimento);
  290.             $pessoa->organizacao_id  $organizacao_id;
  291.             $pessoa->tipo_pessoa_id  1;            
  292.             $pessoa->store(); // save the object
  293.             $pessoa_id $pessoa->id;
  294.             
  295.             if($pessoa_id)
  296.             {
  297.                 $cliente = new Cliente;
  298.                 $cliente->pessoa_id      $pessoa_id;
  299.                 $cliente->organizacao_id $organizacao_id;
  300.                 $cliente->store();
  301.                 $cliente_id $cliente->id;
  302.                 
  303.                 if($cliente_id)
  304.                 {
  305.                     $fisica = new Fisica;
  306.                     $fisica->pessoa_id      $pessoa_id;
  307.                     //$fisica->cpf            = $data->cpf;
  308.                     $fisica->cpf  str_replace("."""$data->cpf);
  309.                     //$fisica->rg             = $data->rg;
  310.                     $fisica->rg  str_replace("."""$data->rg);
  311.                     $fisica->genero_id      $data->genero_id;
  312.                     $fisica->civil_id       $data->estado_civil_id;
  313.                     $fisica->organizacao_id $organizacao_id;
  314.                     $fisica->etnia_id       $data->etnia_id;
  315.                     $fisica->store();
  316.                 }
  317.                 
  318.                 $pessoa_endereco = new PessoaEndereco;
  319.                 /*               
  320.                 if(!empty($data->telefone))
  321.                 {
  322.                     foreach($data['telefone'] as $row =>$contatos)
  323.                     {
  324.                        */
  325.                         //Adiciona contato
  326.                         $contato = new Contato;
  327.                         
  328.                         $contato->pessoa_id        $pessoa_id;
  329.                         $contato->tipo_telefone_id $data->tipo_telefone_id;
  330.                         $contato->telefone         $data->telefone;
  331.                         $contato->operadora_id     $data->operadora_id;
  332.                         $contato->email            $data->email;
  333.                         $contato->site             $data->site;
  334.                         //$pessoa->addContato($contato);
  335.                         $contato->store();
  336.                         /*
  337.                     }
  338.                 }
  339.                 */
  340.             }
  341.             
  342.             
  343.             $this->form->setData$this->form->getData() );// set the data back to the form
  344.                 
  345.             TTransaction::close();// close the transaction
  346.              // reload form and session items
  347.                 $this->onEdit(array('key'=>$pessoa->id));
  348.         echo '<pre>';
  349.         
  350.         print_r($data);
  351.         echo '</pre>';
  352.         
  353.         }
  354.         catch (Exception $e// in case of exception
  355.         {
  356.             new TMessage('error'$e->getMessage());
  357.             $this->form->setData$this->form->getData() ); // keep form data
  358.              TTransaction::rollback();
  359.         }
  360.     }
  361.     
  362.     /**
  363.      * method onCep()
  364.      * Executed whenever the user clicks at the edit button da datagrid
  365.      */
  366.      function onCep($param){
  367.         $retorno Endereco::BuscaCep($param['cep']);
  368.         if ( $retorno )
  369.         {
  370.             $data $this->form->getData();
  371.             $data->ibge       strtoupper$retorno['ibge']);
  372.             $data->gia        strtoupper$retorno['gia']);
  373.             $data->logradouro strtoupper$retorno['logradouro']);
  374.             $data->bairro     strtoupper$retorno['bairro']);
  375.             $data->cidade     strtoupper$retorno['localidade']);
  376.             $data->uf         strtoupper$retorno['uf']);
  377.             $this->form->setData($data);
  378.         }
  379.         else {
  380.             new TMessage("error""CEP - Em Branco ou Inválido");
  381.         }
  382.     }
  383.     
  384.     function onEdit($param)
  385.     {
  386.         
  387.     }
  388.                                
  389.                               
  390.     
  391.     
  392. }
  393. ?>


Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (4)


NR

Primeiro confira o nome dos campos. Você criou o campo com o nome TipoTelefone e na hora de salvar está buscando o atributo tipo_telefone_id.
E veja o link abaixo, a maneira de tratar as informações de formulários multivalues é um pouco diferente:
adianti.com.br/framework_files/tutor/index.php?class=SaleMultiValueF
RB

Então,

Tentei seguir o exemplo da video aula e também do link que passou, mas não consegui,

Pode me ajudar a corrigir ?
RB

  1. <?php
  2. class ClienteFisicoBuilder extends TPage
  3. {
  4.    protected $form;
  5.    protected $table_contato;
  6.    protected $deta_row;
  7.     public function __construct($param)
  8.     {
  9.         parent::__construct($param);
  10.         $this->form = new BootstrapFormBuilder('frm_cliente_fisico');
  11.         $this->form->setFormTitle('Cliente');
  12.         $this->form->style='font-family:Arial Narrow;width:100%;';
  13.         $dados_cliente = new TLabel('Dados Pessoais''#1F4E78'12'b');
  14.         $dados_cliente->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;float:left;margin-top:-20px;font-family:Arial Narrow;';
  15.         $this->form->addContent( [$dados_cliente] );
  16.         $lbl_id = new TLabel('ID','#1F4E78');
  17.         $label_nome = new TLabel('Nome','#1F4E78');
  18.         $label_nome->style='text-align:left;float:left;font-family:Arial Narrow;';
  19.         $lbl_data_nascto = new TLabel('Data Nascimento','#1F4E78');
  20.         $lbl_data_nascto->style='text-align:left;float:left;font-family:Arial Narrow;';
  21.         $lbl_estado_civil = new TLabel('Estado Cívil','#1F4E78');
  22.         $lbl_estado_civil->style='text-align:left;float:left;font-family:Arial Narrow;';
  23.         $id   = new TEntry('id');
  24.         $id->setEditable(false);
  25.         $nome = new TEntry('nome');
  26.         $nome->style='text-align:left;float:left;';
  27.         $nome->addValidation('Data Nascimento', new TRequiredValidator);
  28.         $data_nascimento = new TDate('data_nascimento');
  29.         $data_nascimento->addValidation('Data Nascimento', new TRequiredValidator);
  30.         $data_nascimento->style='text-align:left;float:left;';
  31.         $data_nascimento->setMask('dd/mm/yyyy'); // define date mask
  32.         //$data_nascimento->setDatabaseMask('yyyy-mm-dd');
  33.         $estado_civil = new TDBCombo('estado_civil_id','sgvo''Civil''id''descricao');
  34.         $estado_civil->setDefaultOption(false);
  35.         $lbl_genero = new TLabel('Genero','#1F4E78');
  36.         $lbl_genero->style ='text-align:left;float:left;width:100%;font-family:Arial Narrow;';
  37.         $genero_id = new TCombo('genero_id');
  38.         $genero_id->addItems( ['1' => 'Masculino''2' => 'Feminino'] );
  39.         $genero_id->setDefaultOption(false);
  40.         $lbl_cpf = new TLabel('CPF','#1F4E78');
  41.         $cpf = new TEntry('cpf');
  42.         $cpf->setMask('000.000.000.00');
  43.         $cpf->addValidation('CPF', new TCPFValidator, new TMaxValueValidator,array(14));
  44.         //$cpf->setDatabaseMask('00000000000');
  45.         $lbl_cpf->style='text-align:left;float:left;font-family:Arial Narrow;';
  46.         $lbl_rg = new TLabel('RG','#1F4E78');
  47.         $rg = new TEntry('rg');
  48.         $rg->setMask('00.000.000.00');
  49.         $rg->setMaxLength(12);
  50.         $lbl_rg->style='text-align:left;float:left;font-family:Arial Narrow;';
  51.         /*
  52.         $lbl_cnh = new TLabel('CNH','#1F4E78');
  53.         $cnh = new TEntry('cnh');
  54.         $cnh->setMask('00.000.000.00');
  55.         $cnh->setMaxLength(12);
  56.         $lbl_cnh->style='text-align:left;float:left;';
  57.         */
  58.         $lbl_etnia = new TLabel('Etnia','#1F4E78');
  59.         $etnia_id = new TDBCombo('etnia_id','sgvo','Etnia','id','descricao');
  60.         $etnia_id->setDefaultOption(false);
  61.        // $this->form->addFields( [$label_id,$id] );
  62.         $this->form->addFields( [$lbl_id,$label_nome,$lbl_data_nascto,$lbl_estado_civil] );
  63.         $this->form->addFields( [$id,$nome,$data_nascimento,$estado_civil] );
  64.         $this->form->addFields( [$lbl_genero,$lbl_etnia,$lbl_cpf,$lbl_rg] );
  65.         $this->form->addFields( [$genero_id,$etnia_id,$cpf,$rg] );
  66.         //dados de contato
  67.         $contato = new TLabel('Contato''#1F4E78'12'b');
  68.         $contato->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  69.         $lbl_ddi = new TLabel('DDI','#1F4E78');
  70.         $lbl_ddi->style='text-align:left;font-family:Arial Narrow;';
  71.         $ddi = new TEntry('ddi[]');
  72.         $lbl_dd = new TLabel('DDD','#1F4E78');
  73.         $lbl_dd->style='text-align:left;font-family:Arial Narrow;';
  74.         $dd = new TEntry('dd[]');
  75.         $lbl_tipo_telefone = new TLabel('Tipo Telefone','#1F4E78');
  76.         $lbl_tipo_telefone->style='text-align:left;font-family:Arial Narrow;';
  77.         $tipo_telefone_id = new TDBCombo('tipo_telefone_id[]','sgvo','TipoTelefone','id','descricao');
  78.         $tipo_telefone_id->setDefaultOption(false);
  79.         $lbl_telefone = new TLabel('Telefone','#1F4E78');
  80.         $lbl_telefone->style='text-align:left;font-family:Arial Narrow;';
  81.         $telefone = new TEntry('telefone[]');
  82.         $telefone->setMask('9999-9999');
  83.         $lbl_operadora = new TLabel('Operadora','#1F4E78');
  84.         $lbl_operadora->style='text-align:left;font-family:Arial Narrow;';
  85.         $operadora_id = new TDBCombo('operadora_id[]','sgvo','Operadora','id','nome');
  86.         $operadora_id->setDefaultOption(false);
  87.         $lbl_email = new TLabel('Email','#1F4E78');
  88.         $lbl_email->style='text-align:left;;font-family:Arial Narrow;';
  89.         $email = new TEntry('email');
  90.         //$email->addValidation('email', new TEmailValidator); // email field
  91.         $lbl_site = new TLabel('Site','#1F4E78');
  92.         $lbl_site->style='text-align:left;font-family:Arial Narrow;';
  93.         $site = new TEntry('site');
  94.         $this->form->addContent( [$contato] );
  95.         //adiciona campos para contato / telefone
  96.         $table = new TTable;
  97.         $table->style='border 1px solid #333;font-family:Arial Narrow;';
  98.         $table->width='100%';
  99.         $table->addSection('thead');
  100.         $table->addRowSet([$lbl_ddi,$lbl_dd,$lbl_tipo_telefone,$lbl_telefone,$lbl_operadora]);
  101.         $table->addSection('tbody');
  102.         for ($n=0$n<=0$n++)
  103.         {
  104.             // create delete button
  105.             $del = new TImage('fa:trash-o blue');
  106.             $del->onclick 'ttable_remove_row(this)';
  107.             // create add button
  108.             $add = new TButton('clone');
  109.             $add->setLabel('Adicionar');
  110.             $add->setImage('fa:plus-circle green');
  111.             $table->addRowSet( [$ddi,$dd,$tipo_telefone_id,$telefone,$operadora_id$del]);
  112.         }
  113.         $add->addFunction('ttable_clone_previous_row(this)');
  114.         $table->addRowSet($add);
  115.         $row = array($table);
  116.         $this->form->addFields($row);
  117.         $this->form->addFields( [ $lbl_email,$lbl_site] );
  118.         $this->form->addFields( [ $email,$site] );
  119.         //dados de correspondência
  120.         $lbl_endereco = new TLabel('Endereco''#1F4E78'12'b');
  121.         $lbl_endereco->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  122.         $lbl_cep = new TLabel('Cep''#1F4E78');
  123.         $lbl_cep->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  124.         $cep = new TEntry('cep');
  125.         $cep->addValidation('CEP', new TRequiredValidator, new TMaxValueValidator,array(8));
  126.         $lbl_logradouro = new TLabel('Logradouro''#1F4E78');
  127.         $lbl_logradouro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  128.         $logradouro = new TEntry('logradouro');
  129.         $logradouro->style='float:left;';
  130.         $logradouro->addValidation('Logradouro', new TRequiredValidator);
  131.         $lbl_numero = new TLabel('Número''#1F4E78');
  132.         $lbl_numero->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  133.         $numero = new TEntry('numero');
  134.         $numero->addValidation('Número', new TRequiredValidator);
  135.         $lbl_bairro = new TLabel('Bairro''#1F4E78');
  136.         $lbl_bairro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  137.         $bairro = new TEntry('bairro');
  138.         $bairro->addValidation('Bairro', new TRequiredValidator);
  139.         $lbl_cidade = new TLabel('Cidade''#1F4E78');
  140.         $lbl_cidade->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  141.         $cidade = new TEntry('cidade');
  142.         $cidade->addValidation('Cidade', new TRequiredValidator);
  143.         $lbl_uf = new TLabel('Estado''#1F4E78');
  144.         $lbl_uf->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  145.         $uf = new TEntry('uf');
  146.         $uf->addValidation('Estado', new TRequiredValidator);
  147.         $lbl_complemento = new TLabel('Complemento''#1F4E78');
  148.         $lbl_complemento->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  149.         $complemento = new TEntry('complemento');
  150.         $lbl_id->setSize('10%');
  151.         $label_nome->setSize('30%');
  152.         $nome->setSize('30%');
  153.         $id->setSize('10%');
  154.         $lbl_data_nascto->setSize('20%');
  155.         $data_nascimento->setSize('20%');
  156.         $lbl_estado_civil->setSize('20%');
  157.         $estado_civil->setSize('20%');
  158.         $lbl_genero->setSize('20%');
  159.         $genero_id->setSize('20%');
  160.         $lbl_cpf->setSize('20%');
  161.         $cpf->setSize('20%');
  162.         $lbl_rg->setSize('20%');
  163.         $rg->setSize('20%');
  164.         //$lbl_cnh->setSize('19%');
  165.         //$cnh->setSize('19%');
  166.         $lbl_etnia->setSize('20%');
  167.         $etnia_id->setSize('20%');
  168.         $lbl_ddi->setSize('40');
  169.         $ddi->setSize('40');
  170.         $lbl_dd->setSize('40');
  171.         $dd->setSize('40');
  172.         $lbl_tipo_telefone->setSize('100');
  173.         $tipo_telefone_id->setSize('100');
  174.         $lbl_telefone->setSize('100');
  175.         $telefone->setSize('100');
  176.         $operadora_id ->setSize('100');
  177.         $lbl_email->setSize('40%');
  178.         $lbl_site->setSize('40%');
  179.         $email->setSize('40%');
  180.         $site->setSize('40%');
  181.         $lbl_cep->setSize('28.5%');
  182.         $cep->setSize('20%');
  183.         $lbl_logradouro->setSize('40%');
  184.         $logradouro->setSize('40%');
  185.         $lbl_numero->setSize('20%');
  186.         $numero->setSize('20%');
  187.         $lbl_bairro->setSize('20%');
  188.         $lbl_cidade->setSize('32%');
  189.         $lbl_uf->setSize('8%');
  190.         $bairro->setSize('20%');
  191.         $cidade->setSize('32%');
  192.         $uf->setSize('8%');
  193.         $lbl_complemento->setSize('20%');
  194.         $complemento->setSize('20%');
  195.         $btn_cep = new TButton('btn_cep');
  196.         $btn_cep->setSize(100);
  197.         $btn_cep->style='float:left;padding-rigth:10px;color:#1F4E78';
  198.         $btn_cep->setAction(new TAction(array($this,'onCep')),'Busca Cep');
  199.         $btn_cep->setImage('fa:search blue');
  200.         $this->form->addFields( [$lbl_endereco] );
  201.         $this->form->addFields( [$lbl_cep,$lbl_logradouro,$lbl_numero] );
  202.         $this->form->addFields( [$cep,$btn_cep,$logradouro,$numero] );
  203.         $this->form->addFields( [$lbl_bairro,$lbl_cidade,$lbl_uf,$lbl_complemento] );
  204.         $this->form->addFields( [$bairro,$cidade,$uf,$complemento] );
  205.         $this->form->addAction('Salvar', new TAction(array($this'onSave')), 'ico_save.png');
  206.         // wrap the page content using vertical box
  207.         $vbox = new TVBox;
  208.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  209.         $vbox->add($this->form);
  210.         parent::add($this->form);
  211.     }
  212.     /**
  213.      * Post data
  214.      */
  215.     function onSave($param){
  216.            $organizacao_id TSession::getValue('organizacion_id'); // pega id da empresa
  217.            $atualizacao date('Y-m-d H:m:s');
  218.        try
  219.         {
  220.             TTransaction::open('centinel'); // open a transaction
  221.             $data $this->form->getData(); // get the form data into an active record Pessoa
  222.             $pessoa = new Pessoa;
  223.             $pessoa->fromArray((array) $data);
  224.             $this->form->validate();// form validation
  225.             /**
  226.             // Enable Debug logger for SQL operations inside the transaction
  227.             TTransaction::setLogger(new TLoggerSTD); // standard output
  228.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  229.             **/
  230.             $pessoa->nome            $data->nome;
  231.             $pessoa->data_nascimento TDate::date2us($data->data_nascimento);
  232.             $pessoa->organizacao_id  $organizacao_id;
  233.             $pessoa->tipo_pessoa_id  1;
  234.             $pessoa->store(); // save the object
  235.             $pessoa_id $pessoa->id;
  236.             if($pessoa_id)
  237.             {
  238.                 $cliente = new Cliente;
  239.                 $cliente->pessoa_id      $pessoa_id;
  240.                 $cliente->organizacao_id $organizacao_id;
  241.                 $cliente->store();
  242.                 $cliente_id $cliente->id;
  243.                 if($cliente_id)
  244.                 {
  245.                     $fisica = new Fisica;
  246.                     $fisica->pessoa_id      $pessoa_id;
  247.                     //$fisica->cpf            = $data->cpf;
  248.                     $fisica->cpf  str_replace("."""$data->cpf);
  249.                     //$fisica->rg             = $data->rg;
  250.                     $fisica->rg  str_replace("."""$data->rg);
  251.                     $fisica->genero_id      $data->genero_id;
  252.                     $fisica->civil_id       $data->estado_civil_id;
  253.                     $fisica->organizacao_id $organizacao_id;
  254.                     $fisica->etnia_id       $data->etnia_id;
  255.                     $fisica->store();
  256.                 }
  257.                 $pessoa_endereco = new PessoaEndereco;
  258.                 if(!empty($param['telefone']) And is_array($param['operadora_id']))
  259.                 {
  260.                     foreach($param['telefone'] as $row =>$contatos)
  261.                     {
  262.                         //Adiciona contato
  263.                         $contato = new Contato;
  264.                         $contato->pessoa_id        $pessoa_id;
  265.                         $contato->ddi              $param['ddi'];
  266.                         $contato->dd               $param['dd'];
  267.                         $contato->tipo_telefone_id $param['tipo_telefone_id'];
  268.                         $contato->telefone         $param['telefone'];
  269.                         $contato->operadora_id     $param['operadora_id'];
  270.                         //$pessoa->addContato($contato);
  271.                         $contato->store();
  272.                         $contato_id $contato->id;
  273.                     }
  274.                     $contato->email            $param->email;
  275.                     $contato->site             $data->site;
  276.                 }
  277.             }
  278.             $this->form->setData$this->form->getData() );// set the data back to the form
  279.             $data->id $pessoa->id;
  280.             TTransaction::close();// close the transaction
  281.              // reload form and session items
  282.                 $this->onEdit(array('key'=>$pessoa->id));
  283.         echo '<pre>';
  284.         print_r($data);
  285.         echo '</pre>';
  286.         }
  287.         catch (Exception $e// in case of exception
  288.         {
  289.             new TMessage('error'$e->getMessage());
  290.             $this->form->setData$this->form->getData() ); // keep form data
  291.              TTransaction::rollback();
  292.         }
  293.     }
  294.     /**
  295.      * method onCep()
  296.      * Executed whenever the user clicks at the edit button da datagrid
  297.      */
  298.     public function onCep($param){
  299.         $retorno Endereco::BuscaCep($param['cep']);
  300.         if ( $retorno )
  301.         {
  302.             $data $this->form->getData();
  303.             $data->ibge       strtoupper$retorno['ibge']);
  304.             $data->gia        strtoupper$retorno['gia']);
  305.             $data->logradouro strtoupper$retorno['logradouro']);
  306.             $data->bairro     strtoupper$retorno['bairro']);
  307.             $data->cidade     strtoupper$retorno['localidade']);
  308.             $data->uf         strtoupper$retorno['uf']);
  309.             $this->form->setData($data);
  310.         }
  311.         else {
  312.             new TMessage("error""CEP - Em Branco ou Inválido");
  313.         }
  314.     }
  315.     function onEdit($param)
  316.     {
  317.     }
  318. }
  319. ?>

NR

Como esses campos são arrays, você precisa informar qual o índice($row) na hora de atribuí-los ao objeto $contato:
  1. <?php
  2. foreach($param['telefone'] as $row =>$contatos)
  3. {
  4.        //Adiciona contato
  5.        $contato = new Contato;
  6.        $contato->pessoa_id   $pessoa_id;
  7.        $contato->ddi              $param['ddi'][$row];
  8.        $contato->dd               $param['dd'][$row];
  9.        ...
  10. }
  11. ?>