Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
preciso validar os campos de um fomulario (destinado a tabela cmt_blogs) que esta "ligada" a tabela blogs.
tentei mas não consegui =/
o model blog.php
<?php
class Blog extends AppModel {
var $name = 'Blog';
// JOIN MODO PADRÃO
var $belongsTo = array('atr_blogs' => array('className' => 'AtrBlog', 'foreignKey' => 'atr_blogs_id'));
var $hasMany = array('img_blogs' => array( // interliga com a tabela de imagens do blog
'className' => 'ImgBlog',
'order' => '`img_blogs`.`blog_id` DESC'),
'cmt_blogs' => array( // interliga com a tabela de cometarios do blog
'className' => 'CmtBlog',
'conditions' => 'mostrar = "s"',
'order' => 'data_hora DESC'),
'cat_blogs' => array( // interliga com a tabela de categorias do blog
'className' => 'CatBlog',
'order' => 'categoria DESC'));
var $validate = array(
'autor' => array('minLength' => array('rule' => array('minLength', '4'), 'message' => 'min. de 4 caractéres'),
'notEmpty' => array('rule' => 'notEmpty', 'message' => 'este campo é obrigatório')),
'email' => array('email' => array('rule' => 'email', 'message' => 'email inválido'),
'notEmpty' => array('rule' => 'notEmpty', 'message' => 'este campo é obrigatório')),
'link' => array('url' => array('rule' => 'url', 'message' => 'link inválido'))
);
}
?>
o form:
<?php
$para = array('controller' => 'blog', 'action' => "post/".$dado["Blog"]["titulo"]);
echo $form->create('cmt_blogs' , array('url' => $para));
echo '<span style="float:left;">';
echo $form->input('cmt_blogs.autor');
echo $form->input('cmt_blogs.email');
echo $form->input('cmt_blogs.link');
echo '</span> <span style="float:left;">';
echo $form->textarea('cmt_blogs.comentario');
echo $form->submit('/');
echo '</span>';
?>
na hora de validar os dados no blog_controller.php eu tentei:
$this->Blog->validates()
e
$this->Blog->cmt_blogs->validates()
não funcionou!
o que estou fazendo errado (ou não estou fazendo)?
obrigado
>
Na regra de validação, model:
var $validate = array(
'autor' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Não permitido campo em branco'
),
'minlength' => array(
'rule' => array('minLength', '4'),
'message' => 'Mínimo de 4 caracteres'
),
));
No controller:
$this->Blog->set( $this->data ); // Sem essa linha não faz a validação ( [http://book.cakephp.org/pt/view/410/Validating-Data-from-the-Controller](http://book.cakephp.org/pt/view/410/Validating-Data-from-the-Controller) )
if ($this->Blog->validates()) {
// lógica de validado
} else {
// lógica de não validado
}
já tem isso...
e mesmo assim não funciona.
Se os campos pertencem à um model chamado cmt_blogs, as regras de validação devem estar neste model, não no relacionado.
>
Se os campos pertencem à um model chamado cmt_blogs, as regras de validação devem estar neste model, não no relacionado.
Coloquei as regras nos dois models, e não funciona =/
o model cmt_blogs:
<?php
class CmtBlog extends AppModel {
var $name = 'CmtBlog';
var $validate = array(
'autor' => array('minLength' => array('rule' => array('minLength', '4'), 'message' => 'min. de 4 caractéres'),
'notEmpty' => array('rule' => 'notEmpty', 'message' => 'este campo é obrigatório')),
'email' => array('email' => array('rule' => 'email', 'message' => 'email inválido'),
'notEmpty' => array('rule' => 'notEmpty', 'message' => 'este campo é obrigatório')),
'link' => array('url' => array('rule' => 'url', 'message' => 'link inválido'))
);
}
}
?>
alguem ?
=/
Bem, fazendo os testes por aqui, vamos lá:
Exemplo básico:
models/post.php
<?php
class Post extends AppModel {
var $name = 'Post';
var $primaryKey = 'id';
var $hasMany = array(
'Comment' => array(
'className' => 'Comment',
'foreignKey' => 'post_id',
'depend' => true
)
);
var $validate = array(
'autor' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Não permitido campo em branco'
),
'minlength' => array(
'rule' => array('minLength', '4'),
'message' => 'Mínimo de 4 caracteres'
),
));
}
PS: preciso sair, daqui a pouco termino do postar.. beleza?
Como não consegui editar, segue a continuação:
models/comment.php
<?php
class Comment extends AppModel {
var $name = 'Comment';
var $primaryKey = 'id';
var $belongsTo = array( 'Post' => array(
'className' => 'Post',
'foreignKey'=> 'post_id'
));
var $validate = array(
'email' => array(
'rule' => 'email',
'message' => 'Não permitido campo em branco')
);
}
controllers/posts_controller.php
<?php
class PostsController extends AppController {
var $name = 'Posts';
function index() {
$this->redirect(array( 'action' => 'add'));
}
function add() {
if( !empty($this->data) ){
$this->Post->set( $this->data ); // Sem essa linha não faz a validação ( [http://book.cakephp.org/pt/view/410/Validating-Data-from-the-Controller](http://book.cakephp.org/pt/view/410/Validating-Data-from-the-Controller) )
if ( $this->Post->saveAll($this->data, array('validate' => 'first')) ) {
echo 'Dados válidos';
} else {
echo 'Dados inválidos';
}
}
}
}
views/posts/add.ctp
<?php
echo $form->create('Post', array('action' => 'add'));
echo $form->input('Post.titulo', array('label'=>'Titulo'));
echo $form->input('Post.conteudo');
echo $form->input('Post.autor');
echo $form->input('Comment.0.comentario', array('label'=>'Comentarios'));
echo $form->input('Comment.0.email');
echo $form->end('Add');
?>
********
********
****
Abaixo a demonstração do código em ação:
****
/applications/core/interface/imageproxy/imageproxy.php?img=http://i38.tinypic.com/2nk5dfq.jpg&key=4d852b66a1db437174afb22fad6355d53dcca8b42619dc6b9012529aa6a15b64" alt="Imagem Postada" />
****
netShot a validação em si deu certo ^_^ ,
mas quando o formulário é enviado vazio, aparece a seguinte mensagem:
Warning (2): preg_match() expects parameter 2 to be string, array given [CORE\cake\libs\validation.php, line 889]
Notice (8): Array to string conversion [CORE\cake\libs\validation.php, line 615]
o que pode ser ?
valeu =)
Vamos partir do principio, assim, poderemos dar uma avaliada melhor.
1º Qual a versão do PHP?
2º Qual a versão do cakePHP?
3º Qual o código usado que da este erro?
O código acima e a imagem, é de um formulário vazio, por isso as perguntas acima. :)
>
Vamos partir do principio, assim, poderemos dar uma avaliada melhor.
1º Qual a versão do PHP?
2º Qual a versão do cakePHP?
3º Qual o código usado que da este erro?
O código acima e a imagem, é de um formulário vazio, por isso as perguntas acima. :)
O erro parou de aparecer (deve ter sido alguma alteração errada que fiz).
Mais uma última coisa hehe
É possivel validar textarea ?
Procurei algumas coisas no google, mas não encontrei muita coisa ;(
Obrigado pela ajuda cara :D
>
>
Vamos partir do principio, assim, poderemos dar uma avaliada melhor.
1º Qual a versão do PHP?
2º Qual a versão do cakePHP?
3º Qual o código usado que da este erro?
O código acima e a imagem, é de um formulário vazio, por isso as perguntas acima. :)
O erro parou de aparecer (deve ter sido alguma alteração errada que fiz).
Mais uma última coisa hehe
É possivel validar textarea ?
Procurei algumas coisas no google, mas não encontrei muita coisa ;(
Obrigado pela ajuda cara :D
O que exatamente você quer validar nele? Depende do controle que você quer ter sobre ele, seja um pouco mais especifico xD
filtrar algumas palavras :D
Na regra de validação, model:
No controller:
} else { // lógica de não validado }