Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Praca z formularzami II

W poprzedniej notce pokazałem jak zapisywać dane przy pomocy modułu Formation, dziś będziemy kontynuować poznawanie tego jakże przydatnego, a zarazem bardzo bluzgotwórczego modułu.

Modyfikacja frameworka

Przed rozpoczęciem pisania właściwej edycji danych musimy zmienić kilka rzeczy w frameworku. Po pierwsze musimy zmienić metodę __set modelu User. Odpowiada ona za automatyczna zamianę wprowadzonego hasła na hash.

application/models/user.php

public function __set($key, $value)
{
   if ($key === 'password' && !$value)
      return;

   parent::__set($key, $value);
}

Dzięki powyższej zmianie Kohana nie będzie generowała hasha dla pustego hasła.

Kolejna zmiana dotyczy sposobu zapisu danych z formularza do bazy. Dzięki niej pola zdefiniowane w tablicy $disabled nie są brane pod uwagę podczas tworzenia zapytania UPDATE.

application/libraries/MY_Model_Formation.php

<?php

   class Model_Formation extends Model_Formation_Core
   {
      public function save( $commit = true, $values = array( ) )
      {
         if($values == array())
         {
            $values = $_POST;
         }
         if($this->validate($values))
         {
            //mod
            $fields = $this->as_array();
            foreach( $this -> disabled as $field)
            {
               unset( $fields[ $field ] );
            }

            $this->_model->populate($fields);
            //end mod

            if($commit==true)
            {
               return $this->_model->save();
            }
            return $this->_model;
         }
         return false;
      }
   }

?>


Jak się okazało mimo umieszczania „wyłączonych” pól w zapytaniu, ich wartości pobierane są z modelu, a nie z tablicy POST tak więc nie ma możliwości ich zmiany.

Edycja danych

Teraz możemy się zając tworzeniem formularza edycji danych. Będzie on bazował na formularzu rejestracji – zmodyfikujemy w nim tylko reguły walidacji.

application/libraries/User_Form.php

<?php

   class User_Form_Core extends Register_Form_Core
   {
      public function __construct( $model=false,$build=true )
      {
         parent :: __construct( $model, $build );

         $this[ 'Rejestruj' ] -> set_text( 'Zapisz' );
         $this[ 'username' ] -> remove_callback( array( User_Model, '_unique_username' ) );
         $this[ 'password' ] -> remove_rule( 'Rule_Required' );
         $this[ 'password2' ] -> add_callback( array( $this, '_confirmPass' ) );
      }

      public  function _confirmPass( $field )
      {
         if( $this[ 'password' ] -> get_value( ) != $this[ 'password2' ] -> get_value( ) )
            $field -> add_error( 'Callback', Kohana :: lang( 'validation.rule_matches' ) );
      }
   }

?>

Jak widać usunęliśmy reguły walidacji pola login, powodem tego jest brak możliwości zmiany nazwy użytkownika. Dodatkowo usunięta została konieczność podania hasła, dzięki czemu będziemy mogli zmienić sam adres e-mail bez konieczności podawania hasła. Dodany został również callback dla pola password2 sprawdzający czy hasła są identyczne – z jakiś dziwnych powodów reguła Rule_Matches nie chce działać.

Przejdźmy teraz do stworzenia kontrolera.

application/controllers/user.php

<?php

   class User_Controller extends Home_Controller
   {
      public function  __construct()
      {
         parent :: __construct( );

         if( !$this -> auth -> logged_in( ) )
            url :: redirect( '/' );
      }

      public function edit( )
      {
         $form = new User_Form( Session :: get( 'auth_user' ) );

         if( !(bool)$this -> input -> post( ) )
            $form[ 'password' ] -> set_value( '' );

         if( $form -> save( ) )
            Session :: instance( ) -> set_flash( 'flash', Kohana :: lang( 'user.edited' ) );

         $this -> template -> content = View :: factory( 'user_edit', array( 'form' => $form ) );
      }
   }

?>

Jedyną różnicą w stosunku do poprzedniej notki to przekazanie parametru podczas tworzenia formularza. Owy parametr to model, którego dane będziemy modyfikować. Dodatkowo kasujemy wartość pola password w chwili gdy nie przesłano do skryptu danych metoda post. Dzięki temu w formularzu nie będzie wyświetlany hash hasła.

Zobacz także:


Tagi: , , ,
Kategoria: Kohana, Tutorial


2 komentarze

  1. Hash napisał(a):

    1) „Przed rozpoczęciem pisanie” => Przed rozpoczęciem pisania
    2) Ogólnie to fajnie. Pozdro!

  2. thx :-)

Dodaj komentarz