regras / rules

14 views
Skip to first unread message

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 3:23:41 PM1/25/14
to kohan...@googlegroups.com
Pessoal

pensei em fazer regras de validação no model, mas encontrei a seguinte
dificuldade

o model usuarios, serve para o site e para o admin, no site tem campos
obrigatorios e no admin nao, seria melhor colocar a validação a parte ??

outra coisa, uma validação assim

->rule('email', 'matches', array(':validation', 'email', 'email1'))
->rule('email', array('Model_Clientes', 'email_unico'))

seria possive unificar numa regra ->rules() por exemplo ou precisa fazer
rule por rule ??

por enquanto obrigado

Bernardo - Sudeste Hosting

unread,
Jan 25, 2014, 3:53:32 PM1/25/14
to Kohana Php




--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Atenciosamente,
Bernardo Sepulveda de Castro
------- ------- ------- -------- -------- --------
Desenvolvedor Web

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 3:54:30 PM1/25/14
to kohan...@googlegroups.com
Valeu demais......
vai me ajudar muito !!!

muito obrigado !!!


Em 25/01/2014 18:53, Bernardo - Sudeste Hosting escreveu:
Em 25 de janeiro de 2014 18:23, DS interativa | PHP Grupos <ph...@dsinterativa.com.br> escreveu:
Pessoal

pensei em fazer regras de validação no model, mas encontrei a seguinte dificuldade

o model usuarios, serve para o site e para o admin, no site tem campos obrigatorios e no admin nao, seria melhor colocar a validação a parte ??

outra coisa, uma validação assim

->rule('email', 'matches', array(':validation', 'email', 'email1'))
->rule('email', array('Model_Clientes', 'email_unico'))

seria possive unificar numa regra ->rules() por exemplo ou precisa fazer rule por rule ??

por enquanto obrigado


--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Atenciosamente,
Bernardo Sepulveda de Castro
------- ------- ------- -------- -------- --------
Desenvolvedor Web
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

felipe bastos

unread,
Jan 25, 2014, 4:05:56 PM1/25/14
to kohan...@googlegroups.com

vamos la ...

Algumas validacoes deveriam ser universais ... Ou seja, se no registro do usuario ele verifica o tamanho do nome e regex, password, e email valido ... La no Admin, quando um user for cadastrar outro, deveria verificar as mesmas coisas.

Imagino que ... Ou voce esta confundindo o registro com a alteracao, achando que na alteracao nao precisa verificar tudo, esquecendo que o usuario ja tem dados salvos, e portanto as rules so serao aplicadas nos dados que voce alterar (controle o que vai ser alterado) ..

Ou voce quer fazer um form que permita acrescentar o user com dados problematicos, quebrando a integridade dos dados do sistema.

sugiro repensar ambos os equivocos. A rule garante a integridade dos dados no banco .. Nao prejudique seu banco pensando em coisas desnecessarias para o usuario do site

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 4:10:39 PM1/25/14
to kohan...@googlegroups.com
Entendi... ja repensando....
realmente o cadastro no site e cadastro no admin, devem ter as mesmas validações...

mas realmente existe uma situação de exceção e sendo bem grosseiro para exemplificar, vamos dizer que o CPF do usuario no site sempre será valido
e no admin, poderia haver a possibilidade de cadastrar sem CPF, apesar de isso quebrar a integridade...

optei neste momento por validar no controller e manter o model sem validação, até ter um tempo para avaliar isso melhor durante integração com site
ai se for o caso, ja migro para o model e removo do controller

e tbm é mais para testes neste momento, pois não estava conseguindo "entender" a forma de validar, fica de experiencia...

valeu demais pela ajuda meeeeesssssssmoooooo


Em 25/01/2014 19:05, felipe bastos escreveu:

vamos la ...

Algumas validacoes deveriam ser universais ... Ou seja, se no registro do usuario ele verifica o tamanho do nome e regex, password, e email valido ... La no Admin, quando um user for cadastrar outro, deveria verificar as mesmas coisas.

Imagino que ... Ou voce esta confundindo o registro com a alteracao, achando que na alteracao nao precisa verificar tudo, esquecendo que o usuario ja tem dados salvos, e portanto as rules so serao aplicadas nos dados que voce alterar (controle o que vai ser alterado) ..

Ou voce quer fazer um form que permita acrescentar o user com dados problematicos, quebrando a integridade dos dados do sistema.

sugiro repensar ambos os equivocos. A rule garante a integridade dos dados no banco .. Nao prejudique seu banco pensando em coisas desnecessarias para o usuario do site

Em 25/01/2014 17:23, "DS interativa | PHP Grupos" <ph...@dsinterativa.com.br> escreveu:
Pessoal

pensei em fazer regras de validação no model, mas encontrei a seguinte dificuldade

o model usuarios, serve para o site e para o admin, no site tem campos obrigatorios e no admin nao, seria melhor colocar a validação a parte ??

outra coisa, uma validação assim

->rule('email', 'matches', array(':validation', 'email', 'email1'))
->rule('email', array('Model_Clientes', 'email_unico'))

seria possive unificar numa regra ->rules() por exemplo ou precisa fazer rule por rule ??

por enquanto obrigado

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

felipe bastos

unread,
Jan 25, 2014, 4:11:00 PM1/25/14
to kohan...@googlegroups.com

A rule externa ao model deve ser usada com moderacao .. Afinal, e codigo espalhado pelo sistema .. Use se realmente for indispensavel no form.

Aquilo que for validacao padrao deve ir no model

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 4:12:59 PM1/25/14
to kohan...@googlegroups.com
ja proveitando, tbm estou conseguindo ajustar mensagens personalizadas
para cada model além das mensagens default com regras diferenciadas
como cpf unico, email unico etc...

vamo aprendendo cada vez mais...rsrsrs

to reavaliando toda situação para ver se realmente nada foge do padrão a
ponto de ter a validação no controller...
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana
> Php" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails,
> envie um e-mail para kohana-php+...@googlegroups.com.

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 5:07:35 PM1/25/14
to kohan...@googlegroups.com
Felipe, migrando tudo para o model, tive um problema com validação entre
comparação de campos, por exempo senha e senha1

no controller era assim
->rule('senha', 'matches', array(':validation', 'senha', 'senha1'))

como seria dentro do model ?

coloquei assim direto mas não funciona, acusa erro de campos diferentes
'senha' => array(
array('matches', array(':validation', 'senha',
'senha1')),
),

me perdi...rsrs.

Em 25/01/2014 19:11, felipe bastos escreveu:
>
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana
> Php" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails,
> envie um e-mail para kohana-php+...@googlegroups.com.

felipe bastos

unread,
Jan 25, 2014, 5:48:37 PM1/25/14
to kohan...@googlegroups.com

Ai um bom caso de validacao externa :)

Password e RePassword iguais

Na tabela so tera um campo,

Em 25/01/2014 19:07, "DS interativa | PHP Grupos" <ph...@dsinterativa.com.br> escreveu:
Felipe, migrando tudo para o model, tive um problema com validação entre comparação de campos, por exempo senha e senha1

no controller era assim
->rule('senha', 'matches', array(':validation', 'senha', 'senha1'))

como seria dentro do model ?

coloquei assim direto mas não funciona, acusa erro de campos diferentes
'senha'  => array(
                    array('matches', array(':validation', 'senha', 'senha1')),
       ),

me perdi...rsrs.

Em 25/01/2014 19:11, felipe bastos escreveu:

A rule externa ao model deve ser usada com moderacao .. Afinal, e codigo espalhado pelo sistema .. Use se realmente for indispensavel no form.

Aquilo que for validacao padrao deve ir no model

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

felipe bastos

unread,
Jan 25, 2014, 5:50:13 PM1/25/14
to kohan...@googlegroups.com

Acho que o caminho e esse (nao to no pc).

Principalmente se senha tiver mais de uma rule .. Coloca todas as rules de senha juntas para nao perder o indice do array

Em 25/01/2014 19:07, "DS interativa | PHP Grupos" <ph...@dsinterativa.com.br> escreveu:
Felipe, migrando tudo para o model, tive um problema com validação entre comparação de campos, por exempo senha e senha1

no controller era assim
->rule('senha', 'matches', array(':validation', 'senha', 'senha1'))

como seria dentro do model ?

coloquei assim direto mas não funciona, acusa erro de campos diferentes
'senha'  => array(
                    array('matches', array(':validation', 'senha', 'senha1')),
       ),

me perdi...rsrs.

Em 25/01/2014 19:11, felipe bastos escreveu:

A rule externa ao model deve ser usada com moderacao .. Afinal, e codigo espalhado pelo sistema .. Use se realmente for indispensavel no form.

Aquilo que for validacao padrao deve ir no model

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

DS interativa | PHP Grupos

unread,
Jan 25, 2014, 5:56:42 PM1/25/14
to kohan...@googlegroups.com
putzzzz, verdade....tah no manual...

show

Em 25/01/2014 20:48, felipe bastos escreveu:

Ai um bom caso de validacao externa :)

Password e RePassword iguais

Na tabela so tera um campo,

Em 25/01/2014 19:07, "DS interativa | PHP Grupos" <ph...@dsinterativa.com.br> escreveu:
Felipe, migrando tudo para o model, tive um problema com validação entre comparação de campos, por exempo senha e senha1

no controller era assim
->rule('senha', 'matches', array(':validation', 'senha', 'senha1'))

como seria dentro do model ?

coloquei assim direto mas não funciona, acusa erro de campos diferentes
'senha'  => array(
                    array('matches', array(':validation', 'senha', 'senha1')),
       ),

me perdi...rsrs.

Em 25/01/2014 19:11, felipe bastos escreveu:

A rule externa ao model deve ser usada com moderacao .. Afinal, e codigo espalhado pelo sistema .. Use se realmente for indispensavel no form.

Aquilo que for validacao padrao deve ir no model

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

DS interativa | PHP Grupos

unread,
Jan 26, 2014, 7:31:20 AM1/26/14
to kohan...@googlegroups.com
Felipe, agora me diga o seguinte, migrei tudo para o model e estou "feliz"...rs

tudo funciona, mas me deparei com a seguinte situação
ao cadastrar tudo ocorre 100%

ai realizar o update, no form tenho um campo hidden com ID do usuario, instancio o ORM
com ID , caso contrario o default do id é null

na atualização do registro, as regras de email unico e login unico executam evitando a atualização de dados

eu as removi para testes então o save() (cadastro/update) ocorre belezinha

o que eu poderia fazer para desabilitar essas regras na atualização dos registros ??

valeu


Em 25/01/2014 20:48, felipe bastos escreveu:

Ai um bom caso de validacao externa :)

Password e RePassword iguais

Na tabela so tera um campo,

Em 25/01/2014 19:07, "DS interativa | PHP Grupos" <ph...@dsinterativa.com.br> escreveu:
Felipe, migrando tudo para o model, tive um problema com validação entre comparação de campos, por exempo senha e senha1

no controller era assim
->rule('senha', 'matches', array(':validation', 'senha', 'senha1'))

como seria dentro do model ?

coloquei assim direto mas não funciona, acusa erro de campos diferentes
'senha'  => array(
                    array('matches', array(':validation', 'senha', 'senha1')),
       ),

me perdi...rsrs.

Em 25/01/2014 19:11, felipe bastos escreveu:

A rule externa ao model deve ser usada com moderacao .. Afinal, e codigo espalhado pelo sistema .. Use se realmente for indispensavel no form.

Aquilo que for validacao padrao deve ir no model

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.

felipe bastos

unread,
Jan 26, 2014, 10:27:12 AM1/26/14
to Kohana Php
e por que você quer provocar um falha intencional no sistema?

Olha, automaticamente as rules e filters vão ser chamados .. http://kohanaframework.org/3.3/guide/orm/validation

Mas como já vimos, você pode ver em http://kohanaframework.org/3.3/guide/orm/validation#external-validation .. algumas validações podem ser especificas de um determinado formulário.

$user = ORM::factory('User');
        $user->username = $_POST['username'];
        $user->password = $_POST['password'];
 
        $extra_rules = Validation::factory($_POST)
            ->rule('password_confirm', 'matches', array(
                ':validation', ':field', 'password'
            ));
 
        // Pass the extra rules to be validated with the model
        $user->save($extra_rules);

Não tem muito sentido o admin burlar as regras do sistema. Acho que você cai nesse caso. Se só será validado em 1 form, cria uma rule externa.

Mas se você insistir no erro ... o bug é seu, e problema de quem for dar manutenção kkk 

Em ORM::create($validation) ele faz a seguinte verificação

if ( ! $this->_valid OR $validation)
    {
        $this->check($validation);
    }
 
Então, para burlar a segurança do sistema (não executar os rules), acrescentando um BUG intencional, basta você alterar o comportamento de ORM:

class Admin_ORM extends ORM {

protected $_valid = true; // ! $this->_valid OR $validation ... false OR $validation .. o validation reativa

// você pode modificar create() e update() pra nunca chamar $this->check();
public function create(Validation $validation = null)
parent::create(); //força validation null e $_valid ja é true
}

}

Aí, você passa a usar o Admin_ORM, nos controllers de Admin .. e ele vai ignorar todas as rules e filters do model.

$product = Admin_ORM::factory('Product');
....
$product->save();


Pronto, aí está o seu Bug :D

DS interativa | PHP Grupos

unread,
Jan 26, 2014, 10:45:06 AM1/26/14
to kohan...@googlegroups.com
certissimo...

as regras excepcionais como UNICAS, para email, login e CPF estava  realmente no model, vou colocar como externa
ai eu poderia verificar se tem ID ( update ) e evitar elas ?? (isso no controller)  - vou testar depois

ja tenho um "ORM PAI" no formato que vc disse... com apenas o save fazendo um override mas sem regras dentro, apenas para saber como faria se precisasse
não é o mais apropriado...

tentei colocar dentro dele alguma regra mas para servir para todos, fica complicado então resolvi deixar tudo no model como disse, e as externas no controller mesmo!!

so falta isso para eu fchar uma gestão de usuarios, por exemplo...

felipe bastos

unread,
Jan 26, 2014, 4:24:19 PM1/26/14
to Kohana Php
EH, na hora eu pensei só no ORM ...

mas pensando agora, já que vais criar um Model novo para o Admin... basta criar sem as rules ...

class Admin_Produto extends ORM {

//apenas relações e métodos, sem rules e filters

}

É uma saída, com menos pog

Giovanni Donda | DS interativa

unread,
Feb 5, 2014, 3:17:22 PM2/5/14
to kohan...@googlegroups.com

Pessoal,

Consigo ter um formulário com todos os campos necessários para o cadastro completo

 

Campos para Dados pessoais (model clientes)

Campos para Dados de entrega (model endereços)

 

Onde 1 cliente tem N endereços

 

Pegando o post, VALIDAR e  salvar cada qual em sua respectiva tabela com seu respectivo vinculo num controller apenas (clientes) ??

 

Como seria a melhor opção ??

 

valeu

felipe bastos

unread,
Feb 5, 2014, 4:15:39 PM2/5/14
to kohan...@googlegroups.com
Hum .. saquei ... :D

endereco
cliente_id

Para que $cliente->id funcione você precisa salvar ele primeiro:

$cliente = new Model_Cliente;
$cliente->save();

Em seguida você pode salvar endereço:

$endereco->cliente_id = $cliente->id;
$endereco->save();

É essa a dúvida?

Douglas J.A.M

unread,
Feb 5, 2014, 4:18:32 PM2/5/14
to kohan...@googlegroups.com

Se não me engano a função reload do orm pega o Id sem salvar, basta chamada após instanciar e o Id estará disponível

felipe bastos

unread,
Feb 5, 2014, 4:20:01 PM2/5/14
to kohan...@googlegroups.com
Validação ...

Além das rules e filters, você precisa de validação extra (Validation)?

Se o endereço é do cliente, neste momento, eu validaria ele no cliente.

Se você tem endereços, relatórios especificos, etc .. aí validaria
endereço no controller endereço. Para mim dependeria do Dominio mais
forte (Agregação/Composição).

felipe bastos

unread,
Feb 5, 2014, 4:25:06 PM2/5/14
to kohan...@googlegroups.com
Redesenhando meu raciocinio (codigo bugado kkk)...

$cliente = new Model_Cliente;
$cliente->save();

foreach($this->request->post('enderecos') as $endereco):
$valido = Validation::factory($endereco);
$enderecoModel = new Model_Endereco;
$enderecoModel->cliente_id = $cliente->id;
$enderecoModel->save($valido);
endforeach;

O criterio de Aceitação do cadastro de cliente é que o mesmo tenha 1
ou mais endereços, e que um seja o principal. Depois me mostra o
codigo, vou precisar kkk

DS interativa | PHP Grupos

unread,
Feb 5, 2014, 5:32:11 PM2/5/14
to kohan...@googlegroups.com
é assim
a ideia:
no site tem o cadastro de informação pessoal e endereço num so visando
facilitar para usuario
no admin são separados

logo, tenho cada model separadamente sendo que um cliente tem N endereços
mas no site cadastra apenas 1 como default nesse momento (depois tera
area para cadastro de outros endereços)

ao salvar o cliente, tudo ocorre 100%.
conforme orientação do felipe (valeu demais), labels e rules estão
somente no model
regras extras vão de acordo com a situação: veja

no admin, no cadastro, valido cpf unico, login unico e email unico
ao atualizar, tendo o ID ja, eu ignoro a validação extra

no site, no cadastro, tem a validação extra
mas ao atualizar os dados, a validação extra entra somente se: mudar
email , mudar login para verificar se o novo ja existe na tabela

o endereço é a mesma situação, exceto que no site, está junto com
cadastro do cliente
se eu cadastro o cliente assim
$oModelCliente->values($post)->save($validacao_extra);

pensei em algo que poderia ser assim
$oCliente = $oModelCliente->values($post)->save($validacao_extra);
$oCliente->enderecos($post)->save($validacao_extra_endereco);

mas se isso, ou pensar em algo do tipo for muita gambi....rs ou não ter
nada relacionado
posso tirar o cadastro do endereço e obrigar ele a cadastrar o endereço
em outro formulário em determinado ponto do sistema antes de fechar
determinada situação, por exemplo, uma compra:
se fechar o carrinho e quiser pagar, se não tiver nenhum endereço,
cadastra o endereço e depois volta para o checkout ou algo assim

espero ter sido claro...
por enquanto obrigado

DS interativa | PHP Grupos

unread,
Feb 5, 2014, 5:32:53 PM2/5/14
to kohan...@googlegroups.com
resumindo melhor

cadastrar em duas tabelas diferentes, com validação em apenas um
controller...
acho que seria isso


Em 05/02/2014 19:25, felipe bastos escreveu:

felipe bastos

unread,
Feb 5, 2014, 5:37:52 PM2/5/14
to kohan...@googlegroups.com
Eu iria por esse caminho (apenas algoritmo)

De onde vem isso??

$oCliente->"""""enderecos($post)""""""->save($validacao_extra_endereco);

Se criou o método, dá para passar a validation junto

function addEnderecos($post, $validation)
{
foreach($post['enderecos[]'] as $endereco):
$this->values($endereco)->save();
endforeach;
}

Em 05/02/14, DS interativa | PHP Grupos<ph...@dsinterativa.com.br> escreveu:
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php"
> dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para kohana-php+...@googlegroups.com.
> Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
> Visite este grupo em http://groups.google.com/group/kohana-php.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>


DS interativa | PHP Grupos

unread,
Feb 5, 2014, 5:40:39 PM2/5/14
to kohan...@googlegroups.com
detalhe que não salvo varios endereços e apenas 1 no caso...

mas o detalhe maior seria apenas salvar e validar em conjunto com
retorno em 01 array de erros
e na hora de salvar: $oCliente->save() para o cliente e
$oCliente->enderecos->save() para o endereço

mais ou menos por ai ....

dessa forma eu deixaria opcional a adicao de mais enderecos para o
cliente ao inves de criar uma verificação para fechar a compra

Giovanni Donda | DS interativa

unread,
Feb 11, 2014, 10:13:39 AM2/11/14
to kohan...@googlegroups.com
Putz bem que avisaram que manter um relacionamento é complicado (rs)

Pessoal (em si para o Felipe heheh), seguinte:

É possível: 1 formulario (zão)
Gravar em varias tabelas ?? vindo de um post somente ??

Cliente
Endereços
Imagens

Como eu poderia fazer isso ?

Tentei aqui sem sucesso criando um ORM para o cliente e após salvar, se
salvar
Tentei salvar os demais mas não consegui

De qualquer forma estou fazendo tudo separado agora para funcionar
mas seria mais produtivo se eu conseguisse fazer dessa forma para deixar um
cadastro apenas no admin
ao invés de vários cadastras pequenos

Douglas J.A.M

unread,
Feb 11, 2014, 2:13:01 PM2/11/14
to kohan...@googlegroups.com
Tudo questão de lógica de programação, um post submete um formulario (zão), no controller voce separa e salva onde quer, pegando cada campo como desejar pelo $a->b = $_POST['ab'], $b>e = $_POST['be'], pode até usar a mágica do ORM values, porém, não poderão haver campos batendo nomes de fields.

Não querendo ser chato, porem acontecer excessões, mas creio que alguns posts deste grupo estão mais tentando para um grupo de lógica do que sobre o framework kohana, creio que deva ser direcionado melhor afim de servir melhor de acervo para outros usuários com as mesmas dúvidas que não se prendem ao framework, talvez o GUJ seja uma boa.

DS interativa | PHP Grupos

unread,
Feb 11, 2014, 3:00:53 PM2/11/14
to kohan...@googlegroups.com
justamente !!! mas entra em mais detalhe tecnico do FW que logica de
programação, haja vista que muitas exceções ocorrem.

o campo ativo é obrigatorio no cadastro via admin, mas no site o cliente
não seta isso, coloquei como validação externa !! (exceção de campos
obrigatorios como externos)

na hora de gravar tudo do post, consigo realizar o cadastro e até
vincular, de certa forma, quando da erro num campo, dá pau em tudo na
hora de retornar valores previamente preenchidos, enfim...

então acredito que o FW foi feito mesmo para ter apenas um
formulario/cadastro (mvc) onde fazer um formulario(zão) realmente não
compensa...

posso estar errado, claro, mas ainda não consegui solução...

felipe bastos

unread,
Feb 11, 2014, 3:56:28 PM2/11/14
to Kohana Php
Oxe, qual a dificuldade?? Eu manipulo vários objetos ORMs na mesma action, before, after .. sem problema

Cliente tem muitas Imagens (cliente_id) e tem muitos Endereços (cliente_id)

Você precisa salvar Cliente primeiro, depois salva Imagem e Endereço ... Ou, se usar ajax .. vc pode fazer o upload da imagem primeiro, salvar temporariamente, guardar endereço na sessão, e quando salvar o cliente, salvar o endereço da imagem na tabela de imagens.

No cake o pessoal indexa o form, recentemente passei a fazer o mesmo

input name="cliente[nome]"
input name="endereco[bairro]"
input name="endereco[cidade_id]"

$cliente = ORM::factory('Cliente')->values($this->request->post('cliente'))->create(); //esqueci o request do 3.3

$endereco = ORM::factory('endereco')->set('cliente_id', $cliente->id)->values($this->request->post('endereco'))->create(); //fiz de cabeça,verifica aí :D


--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

DS interativa | PHP Grupos

unread,
Feb 11, 2014, 5:48:00 PM2/11/14
to kohan...@googlegroups.com
RSRSRSRS
ok, nesse ponto eu eu consegui chegar parcial, até funcionou....mas ao dar um erro, não consegui obter como imaginei, ainda mais que tem imagens e com validação externa...

mas enfim, valeu pessoal pelas dicas, to tentando aqui e quaisquer outras duvidas relacionadas eu mando mais emails...valeu

felipe bastos

unread,
Feb 11, 2014, 11:57:01 PM2/11/14
to kohan...@googlegroups.com

Nao entendi ...

Vc deixou validacoes fora do model, no admin ta de um jeito, no site aberto ta de outro ...

O usuario fez alguma besteira obvia como nao preencher o form ...

E vc nao esta verificando antes de salvar?

So passe adiante se estiver tudo ok ... Save() true ...

A depender das suas rules, salve ou bota uma transaction commit roolback para salvar ou desfazer, se nao dever salvar parcialmente.

Quem tem de validar os dados do form e vc ... Ta tudo correto com o kohana ;)

DS interativa | PHP Grupos

unread,
Feb 12, 2014, 11:06:51 AM2/12/14
to kohan...@googlegroups.com
assim, meu cadastro de clientes tem um campo chamado ativo = S/N e no model não valido isso
pois no site não tem como o cliente setar isso.

se eu validar isso no model, eu teria que colocar um valor no post injetado, resolvi então não validar no
model e colocar como uma validação externa (no admin) pois no site não vai validar esse campo.

esse tipo de exceção de campos acontece algumas vezes e nesse caso em si, o cliente tem um formulario
para cadastro de dados, endereços, imagens.

entao eu gravo o cliente, gravo os endereços, e as imagens colocando os vinculos entre eles nas suas tabelas.
quando dá erro, não consigo mostrar como deveria, cada erro no seu campo e não consigo obter todos para cada model
to falhando/errando em algum lugar...mas to tentando aqui...

o transaction ja tenho e somente comito se realmente salvar tudo além de validar separadamente...

como disse, to errando em alguma coisa ainda...mas valeu pelas orientações

felipe bastos

unread,
Feb 12, 2014, 3:09:19 PM2/12/14
to kohan...@googlegroups.com
Eu prefiro trabalhar com datas ao inves de flags como esse (CHAR)

mas vamos de flag .... const ACTIVE = 1;

ativo not null :D basta colocar como padrão do insert 'N' ou 0 e tá validado

try
{

...
$cliente->active = ! $cliente->ACTIVE;

if($cliente->save()){

$endereco = ORM::factory('endereco');

}
else {
throw new Exception('Falha ao salvar o cliente');
}
}
catch(ORM_Exception..... $e)
{

$view->errors = $e->message();
$this->redirect('cliente/index');
return;
}

Se não estiver parecido com isso .. só posso ajudar se mostrar o codigo

Em 12/02/14, DS interativa | PHP Grupos<ph...@dsinterativa.com.br> escreveu:
>> <ph...@dsinterativa.com.br <mailto:ph...@dsinterativa.com.br>> escreveu:
>>> <ph...@dsinterativa.com.br <mailto:ph...@dsinterativa.com.br>>
>>> <mailto:kohana-php%2Bunsu...@googlegroups.com>.
>>> Para postar neste grupo, envie um e-mail para
>>> kohan...@googlegroups.com
>>> <mailto:kohan...@googlegroups.com>.
>>> Visite este grupo em http://groups.google.com/group/kohana-php.
>>> Para obter mais opções, acesse
>>> https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>>
>>> --
>>> http://agilesocial.net <http://agilesocial.net/>
>>> http://twitter.com/felipebastosweb
>>> http://facebook.com/felipebastosweb
>>> --
>>> Você está recebendo esta mensagem porque se inscreveu no grupo
>>> "Kohana Php" dos Grupos do Google.
>>> Para cancelar a inscrição neste grupo e parar de receber seus
>>> e-mails, envie um e-mail para
>>> kohana-php+...@googlegroups.com
>>> <mailto:kohana-php+...@googlegroups.com>.
>>> Para postar neste grupo, envie um e-mail para
>>> kohan...@googlegroups.com <mailto:kohan...@googlegroups.com>.
>>> Visite este grupo em http://groups.google.com/group/kohana-php.
>>> Para obter mais opções, acesse
>>> https://groups.google.com/groups/opt_out.
>>
>> --
>> Você está recebendo esta mensagem porque se inscreveu no grupo
>> "Kohana Php" dos Grupos do Google.
>> Para cancelar a inscrição neste grupo e parar de receber seus
>> e-mails, envie um e-mail para
>> kohana-php+...@googlegroups.com
>> <mailto:kohana-php%2Bunsu...@googlegroups.com>.
>> Para postar neste grupo, envie um e-mail para
>> kohan...@googlegroups.com <mailto:kohan...@googlegroups.com>.
>> Visite este grupo em http://groups.google.com/group/kohana-php.
>> Para obter mais opções, acesse
>> https://groups.google.com/groups/opt_out.
>>
>> --
>> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana
>> Php" dos Grupos do Google.
>> Para cancelar a inscrição neste grupo e parar de receber seus e-mails,
>> envie um e-mail para kohana-php+...@googlegroups.com.
>> Para postar neste grupo, envie um e-mail para
>> kohan...@googlegroups.com.
>> Visite este grupo em http://groups.google.com/group/kohana-php.
>> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php"
> dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para kohana-php+...@googlegroups.com.
> Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
> Visite este grupo em http://groups.google.com/group/kohana-php.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>


DS interativa | PHP Grupos

unread,
Feb 12, 2014, 3:20:29 PM2/12/14
to kohan...@googlegroups.com
ok farei isso assim que puder...
detalhes a parte em relação a tipos de campos...rs

devo terminar esse cadastro entre hoje/amanha e ai posto o codigo...

valeu por enquanto...

Giovanni Donda | DS interativa

unread,
Feb 15, 2014, 5:03:24 PM2/15/14
to kohan...@googlegroups.com
Felipe, nesses relacionamentos e gravações, tudo está indo beleza...

Mas agora, ao colocar um campo de imagem num dos cadastros, acontece o
seguinte:

1) validação do campo imagem é externa (não consegui colocar no model ORM)
2) se dá erro, o upload acontece mesmo assim

Existe algum formato de exemplo de cadastro com upload de imagem E COM
VALIDAÇÃO ??

Pois o formato da documentação não serve para mim, haja vista que valida
somente um upload
Ou explica como validar, mas um cadastro "completo" não encontrei.

Poderiam me orientar uma forma de fazer isso ?

Parte do código
http://pastebin.com/KkfvnsV5

a ideia seria:
1) se tem gid, carrega o registro e se tem imagem cadastrada, apaga
2) se não tem gid, vai gravar um novo registro e valida o campo da imagem
3) o método do _upload é o mesmo do site do kohana de exemplo de upload de
arquivo

Valeu mais uma vez pessoal

-----Mensagem original-----
De: kohan...@googlegroups.com [mailto:kohan...@googlegroups.com] Em nome
de felipe bastos
Enviada em: quarta-feira, 12 de fevereiro de 2014 18:09
Para: kohan...@googlegroups.com
Assunto: Re: [kohana-php] Mais relacionamentos

felipe bastos

unread,
Feb 15, 2014, 7:52:09 PM2/15/14
to Kohana Php
agora não tenho .. mas o upload acontece independente do banco de dados, este é apenas uma das formas de armazenar o endereço da figura.

Você pode validar o MIME, tamanho, etc da figura .. e só salvar o path se estiver tudo ok .. continue, você está no caminho certo :D
Reply all
Reply to author
Forward
0 new messages