[CakePHP 2.3] Tonen form validation error van hidden field

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • xAndyx
  • Registratie: Maart 2004
  • Laatst online: 27-03 13:04
Kan je bij CakePHP een validation error message tonen voor hidden fields? Onderstaand werkt wel, alleen zie ik geen msg als je een parameter weglaat :P. Niet echt user friendly.

Of moet ik een soort 'error placeholders' toevoegen?

Ik heb in mn form deze hidden fields;
code:
1
2
3
add.ctp - view:
echo $this->Form->input('Feedback.site', array('type' => 'hidden', 'value' => $this->params['pass']['0']));
echo $this->Form->input('Feedback.page', array('type' => 'hidden', 'value' => $this->params['pass']['1']));


En hierop valideer ik met dit;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Feedback.php - model:
<?php
class Feedback extends AppModel
{
   public $validate = array(

        'Feedback.site' => array(
            'rule' => 'notEmpty',
            'allowEmpty' => false,
            'message'    => 'Er is iets fout gegaan, probeer opnieuw.'
        ),

        'Feedback.page' => array(
            'rule' => 'notEmpty1',
            'allowEmpty' => false,
            'message'    => 'Er is iets fout gegaan, probeer opnieuw.'
        ),

    );
}
?>

Acties:
  • 0 Henk 'm!

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 10:34
Als het goed is kun je aan het model de validatie errors opvragen. Dan is het een kwestie van de juiste key pakken en de error weergeven?

PHP:
1
$errors = $this->ModelName->invalidFields(); // contains validationErrors array

zie: http://book.cakephp.org/2...-from-the-controller.html

[ Voor 44% gewijzigd door messi op 12-02-2013 16:59 ]

Onze excuses voor het ontbreken van de ondertiteling.


Acties:
  • 0 Henk 'm!

  • Matszs
  • Registratie: Juli 2010
  • Laatst online: 18-07 21:57

Matszs

><>

Je zou gebruik kunnen maken van:
PHP:
1
$this->Form->error('fieldname');

hierover wat meer op:
http://book.cakephp.org/2...rm.html#FormHelper::error

[ Voor 5% gewijzigd door Matszs op 12-02-2013 16:59 ]


Acties:
  • 0 Henk 'm!

  • xAndyx
  • Registratie: Maart 2004
  • Laatst online: 27-03 13:04
Bedankt voor de suggesties maar ik merk dat mn hele validatie niet werkt, hij stuurt gelijk een mailtje als ik de pagina laad :X Ik kan wel !empty() toevoegen maar dat hoort de validatie te doen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 controller:
public function add($site = null, $page = null)
{
        $this->Feedback->set($this->request->data);

        if($this->Feedback->validates())
        {
            if($this->Feedback->save($this->data))
            {
                        /* stuur mailtje */
                        $this->redirect('/pages/bedankt');
            }
        } else {
            $errors = $this->Feedback->invalidFields();
            $this->Session->setFlash(implode(',', $errors));
        }
}
code:
1
2
3
4
5
6
7
8
9
10
11
model met validatie:
class Feedback extends AppModel
{

   public $validate = array(

       'Feedback.suggestie' => array('rule' => 'alphaNumeric', 'allowEmpty' => false)

    );

}

code:
1
2
3
4
view:
echo $this->Form->create('Feedback');
echo $this->Form->input('Feedback.suggestie', array('rows' => '3', 'label' => false)); 
echo $this->Form->end('Verzenden');

Acties:
  • 0 Henk 'm!

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 10:34
xAndyx schreef op woensdag 13 februari 2013 @ 10:02:
Bedankt voor de suggesties maar ik merk dat mn hele validatie niet werkt, hij stuurt gelijk een mailtje als ik de pagina laad :X Ik kan wel !empty() toevoegen maar dat hoort de validatie te doen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 controller:
public function add($site = null, $page = null)
{
        $this->Feedback->set($this->request->data);

        if($this->Feedback->validates())
        {
            if($this->Feedback->save($this->data))
            {
                        /* stuur mailtje */
                        $this->redirect('/pages/bedankt');
            }
        } else {
            $errors = $this->Feedback->invalidFields();
            $this->Session->setFlash(implode(',', $errors));
        }
}
Ik zie dat je controller action add heet, waarom gebruik je niet de standaard new/create edit/update, index, show en delete?

Also zijn je validation rules wel correct? Als een veld niet meegestuurd wordt in de data, validate ie ook niet.
En wat is de reden dat je 2 hidden form fields heb, maar diezelfde waardes ook verwacht in de route? (controller action add verwacht 2 params die hetzelfde heten)

Onze excuses voor het ontbreken van de ondertiteling.


Acties:
  • 0 Henk 'm!

  • xAndyx
  • Registratie: Maart 2004
  • Laatst online: 27-03 13:04
messi schreef op woensdag 13 februari 2013 @ 10:48:
[...] Ik zie dat je controller action add heet, waarom gebruik je niet de standaard new/create edit/update, index, show en delete?
Ik ben nog niet zo bekend met Cake, dit is mn eerste 'project' (de tutorial daar gelaten). Bedoel je dat ik mn controller naam moet standaardiseren? Of dat er standaard controllers zijn ingebakken in Cake? Kon zo 123 geen documentatie vinden.
messi schreef op woensdag 13 februari 2013 @ 10:48:
[...]
Also zijn je validation rules wel correct? Als een veld niet meegestuurd wordt in de data, validate ie ook niet.
En wat is de reden dat je 2 hidden form fields heb, maar diezelfde waardes ook verwacht in de route? (controller action add verwacht 2 params die hetzelfde heten)
Ik heb 'required' => true toegevoegd, nu schiet ie niet meteen een mailtje eruit. Dus dat is opgelost. Ga zo nog even checken of het valideren zelf goed gaat. In de view gaf ik namen als Feedback.site en Feedback.page. Deze moet je in de model schijnbaar gewoon als site & page aanspreken anders pakt validatie m niet. Opgelost :)

De hidden fields bevatten de site waar de feedback is ingevuld en de exacte pagina. Die krijg ik binnen via /add/[site]/[pagina]. En wil ik in het mailtje vermelden + in DB opslaan via $this->params['pass']['0'] etc.
Als er een handigere manier is hoor ik dat natuurlijk graag :9

[ Voor 13% gewijzigd door xAndyx op 13-02-2013 12:10 ]


Acties:
  • 0 Henk 'm!

  • JeroenT
  • Registratie: Juli 2001
  • Laatst online: 15-07 04:36

JeroenT

hoi!

messi schreef op woensdag 13 februari 2013 @ 10:48:
[...]


Ik zie dat je controller action add heet, waarom gebruik je niet de standaard new/create edit/update, index, show en delete?

Also zijn je validation rules wel correct? Als een veld niet meegestuurd wordt in de data, validate ie ook niet.
En wat is de reden dat je 2 hidden form fields heb, maar diezelfde waardes ook verwacht in de route? (controller action add verwacht 2 params die hetzelfde heten)
Voor zover ik weet is dit juiste benadering in CakePHP, daar bake ook dezelfde methode's aanmaakt.

Verder zou ik

PHP:
1
$this->params['pass'];


nog even sanitizen, zie: http://book.cakephp.org/2...y-libraries/sanitize.html

  • Caddy
  • Registratie: Januari 2000
  • Laatst online: 16-07 18:56

Caddy

Press start to shutdown

Hoe ziet je array eruit?

PHP:
1
print_r($this->request->data);


Deze hoort er zo uit te zien als je gebruik wilt maken van de CakePHP validatie

PHP:
1
2
3
4
5
6
7
(
    [ModelName] => Array
    (
        [fieldname1] => 'value'
        [fieldname2] => 'value'
    )
)

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 12-06 22:13

Afvalzak

Zet jij mij even buiten?

Makkelijkst is trouwens om de command line client van Cake te pakken, die kan alles voor je genereren, ook validation rules, models en controllers.

Last.fm | Code Talks

Pagina: 1