omusico / zfdatagrid

Automatically exported from code.google.com/p/zfdatagrid
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

Como converter datas do form para o mysql #657

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago

No BVB_GRID_FORM tem um campo que o usuario insere a data no formato
dd/mm/yyyy e o mysql é YYYY-MM-dd como fazer para converter?

Obrigado

What is the expected output? What do you see instead?

Please insert the appropriate values;
Zend Framework version:
ZFDatgrid Version (Bvb_Grid::getVersion()):
Operating system:
PHP Version:
Database Server and version:
Source Adatapter:

Please provide any additional information below.

Original issue reported on code.google.com by alessand...@gmail.com on 11 May 2011 at 5:45

GoogleCodeExporter commented 9 years ago
Boas,

Tens duas formas de o fazer.

Ou adicionas um evento antes da introdução de dados na bd, ou utilizas filters

Para utilizares filters

<code>
$grid->getForm(1)->getElement('data')->addFilter('oMeuFiltro');
</code>

Mais informações sobre filtros aqui: 
http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.f
ilters

Para utilizares eventos

<code>
function aMinhaFuncao ($event)
{
    $event->setParam('data',strtotime($event->getParam('data'),'Y-m-d'));#Muda data para o nome do campo 
}
$grid->listenEvent('crud.before_insert','aMinhaFuncao');
$grid->listenEvent('crud.before_update','aMinhaFuncao');
</code>

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 12:37

GoogleCodeExporter commented 9 years ago
Issue 656 has been merged into this issue.

Original comment by bento.vi...@gmail.com on 12 May 2011 at 12:38

GoogleCodeExporter commented 9 years ago
Olá Bento, como fazer para esta função ser callable?

$grid->listenEvent('crud.before_update','aMinhaFuncao');

  function aMinhaFuncao ($event) {  
    $event->setParam('ani_dt_nasc',date('Y-m-d H:i:s',strtotime($event->getParam('ani_dt_nasc'))));
  }

eu recebo o erro : 

Message: aMinhaFuncao not callable

Stack trace:
#0 C:\xampp\htdocs\snp\library\Bvb\Grid.php(4332): 
Bvb_Grid_Event_Dispatcher->connect('crud.before_upd...', 'aMinhaFuncao')
#1 
C:\xampp\htdocs\snp\application\modules\admin\controllers\animalController.php(2
52): Bvb_Grid->listenEvent('crud.before_upd...', 'aMinhaFuncao')
#2 C:\xampp\htdocs\snp\library\Zend\Controller\Action.php(513): 
Admin_AnimalController->listAction()
#3 C:\xampp\htdocs\snp\library\Zend\Controller\Dispatcher\Standard.php(295): 
Zend_Controller_Action->dispatch('listAction')
#4 C:\xampp\htdocs\snp\library\Zend\Controller\Front.php(954): 
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Htt
p), Object(Zend_Controller_Response_Http))
#5 C:\xampp\htdocs\snp\library\Zend\Application\Bootstrap\Bootstrap.php(97): 
Zend_Controller_Front->dispatch()
#6 C:\xampp\htdocs\snp\library\Zend\Application.php(366): 
Zend_Application_Bootstrap_Bootstrap->run()
#7 C:\xampp\htdocs\snp\public\index.php(87): Zend_Application->run()
#8 {main}  
Request Parameters:
array (
  'module' => 'admin',
  'controller' => 'animal',
  'action' => 'list',
)

Obrigado

Alessandro Ferreira

Original comment by alessand...@gmail.com on 12 May 2011 at 1:04

GoogleCodeExporter commented 9 years ago
Boas,

Experimenta assim:

$grid->listenEvent('crud.before_update',array($this,'aMinhaFuncao'));

function aMinhaFuncao ($event) {  
    $event->setParam('ani_dt_nasc',date('Y-m-d H:i:s' , strtotime( $event->getParam('ani_dt_nasc'))));
}

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 1:13

GoogleCodeExporter commented 9 years ago
Bento

Parou de dar o erro mas não insere nada na tabela.

Obrigado

Original comment by alessand...@gmail.com on 12 May 2011 at 1:25

GoogleCodeExporter commented 9 years ago
Bento
Não poderia ser por uma funcao de callback do form tipo

$form->setCallbackBeforeUpdate $callback ?

Se sim como poderia implementar isso?

Obrigado

Original comment by alessand...@gmail.com on 12 May 2011 at 1:37

GoogleCodeExporter commented 9 years ago
Boas,

O callback foi removido em favor de eventos.

Quando dizes que não inserir nada na tabela, não insere nenhum registo ou o 
campo ani_dt_nas está em branco?

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 1:44

GoogleCodeExporter commented 9 years ago
Olá Bento

Ele fica '0000-00-00'

Obrigado

Original comment by alessand...@gmail.com on 12 May 2011 at 1:45

GoogleCodeExporter commented 9 years ago
boas,

Desculpa lá, faz o seguinte.

 function aMinhaFuncao ($event)
     {
       $values = $event->getParam('values');
       $values['ani_dt_nasc'] = strtotime($values['ani_dt_nasc'],'Y-m-d H:i:s');
       $event->setParam('values',$values);
     }

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 1:54

GoogleCodeExporter commented 9 years ago
Olá Bento, 

Ficou do mesmo jeito : '0000-00-00'

Obrigado

Original comment by alessand...@gmail.com on 12 May 2011 at 2:04

GoogleCodeExporter commented 9 years ago
Boas,

Faz o seguinte:

 function aMinhaFuncao ($event)
     {
       $values = $event->getParam('values');
       echo "<pre>";
       print_r($values);
       die();

       $values['ani_dt_nasc'] = strtotime($values['ani_dt_nasc'],'Y-m-d H:i:s');
       $event->setParam('values',$values);
     }

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 2:19

GoogleCodeExporter commented 9 years ago
Olá Bento

continua da mesma forma e não printou(print_r) nada também.

Obrigado.

Original comment by alessand...@gmail.com on 12 May 2011 at 10:35

GoogleCodeExporter commented 9 years ago
Alessandro,

Não tenho estado mesmo nos meus dias.

Pensei que estivesses a utilizar o método before_inser e não before_update.

Nessa caso não é values, mas sim newValues

 function aMinhaFuncao ($event)
     {
       $values = $event->getParam('newValues');
       $values['ani_dt_nasc'] = strtotime($values['ani_dt_nasc'],'Y-m-d H:i:s');
       $event->setParam('newValues',$values);
     }

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 12 May 2011 at 9:09

GoogleCodeExporter commented 9 years ago
OK, deu certo usei o svn do proprio zend studio, só uma dívida a função ali 
precisa estar dentro da Action mesmo, ou posso criar uma public function update 
para chamar.

Original comment by thiagote...@gmail.com on 16 May 2011 at 6:30

GoogleCodeExporter commented 9 years ago
Boas,

Podes colocar a função onde quiseres.

Tens é que depois especificar o scope.

Imagina que tens um ficheiro com funções.

Fazes assim:

$grid->listenEvent('crud.before_update','aMinhaFuncao');

Mas se for um método tens que especificar em que classe está. No caso de 
estar dentro da classe actual usas

$grid->listenEvent('crud.before_update',array($this,'aMinhaFuncao'));

Se estiver dentro de outra classe usas

$grid->listenEvent('crud.before_update',array('ONomeDaMinhaClasse','aMinhaFuncao
'));

Com os melhores cumprimentos,
Bento Vilas Boas

Original comment by bento.vi...@gmail.com on 16 May 2011 at 6:36