Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]sfGuard - jak zrobic by domyslnie is_active=0 ?
Forum PHP.pl > Forum > PHP > Frameworki
nieraczek
Mam zainstalowaną wtyczkę sfDoctrineGuard. Domyślnie w tabeli sf_guard_user kolumna is_active ma wartość = 1, a ja chciałbym żeby domyslnie było 0. Jak zmieniałem w tabeli na domyslnie '0' i zbudowałem schemat itd. to jak robię teraz rejestrację to i tak po rejestracji nowy użytkownik ma is_active=1. Wiem, że można zrobić zapytanie zmieniające is_active po dodaniu użytkownika na 0, ale w symfony na pewno jest krótszy sposób ?

Jak w formularzu rejestracyjnym ustawiałem to pole na domyślnie 0 to i tak po dodaniu użytkownika było 1:
  1. <?php
  2. class RejestracjaForm extends sfGuardUserForm
  3. {
  4.  public function configure()
  5.  {
  6.    unset(
  7.      $this['id'],
  8.      $this['is_active'],
  9.      $this['is_super_admin'],
  10.      $this['updated_at'],
  11.      $this['groups_list'],
  12.      $this['permissions_list'],
  13.      $this['last_login'],
  14.      $this['created_at'],
  15.      $this['salt'],
  16.      $this['algorithm']
  17.    );
  18.    
  19.    
  20.    
  21.  
  22.    //$this->widgetSchema['is_active'] = new sfWidgetFormInput();
  23.        $this->widgetSchema['password'] = new sfWidgetFormInputPassword();
  24.        $this->widgetSchema['password_confirmation'] = new sfWidgetFormInputPassword();
  25.    $this->widgetSchema['imie'] = new sfWidgetFormInput();
  26.    $this->widgetSchema['nazwisko'] = new sfWidgetFormInput();
  27.    $this->widgetSchema['email'] = new sfWidgetFormInput();
  28.    
  29.    //$this->setDefaults(array('is_active' => 0));
  30.  
  31.    
  32.    $this->widgetSchema->setLabels(array(
  33.      'username'    => 'Login',
  34.      'password'   => 'Hasło',
  35.    'password_confirmation'   => 'Powtórz hasło',
  36.    ));    
  37.    
  38.    
  39.    $this->setValidators(array(
  40.      'username'   => new sfValidatorString(array('max_length' => 50, 'min_length' => 5, 'required' => true),
  41.      array('required' => 'Nie wpisano loginu.', 'max_length' => 'Zbyt długi login.', 'min_length' => 'Zbyt krótki login.')),
  42.      
  43.      'password' => new sfValidatorString(array('max_length' => 50, 'min_length' => 5, 'required' => true),
  44.      array('required' => 'Nie wpisano hasła.', 'max_length' => 'Zbyt długe hasło.', 'min_length' => 'Zbyt krótkie hasło.')),
  45.      
  46.      'password_confirmation' => new sfValidatorString(array('max_length' => 50, 'min_length' => 5, 'required' => true),
  47.      array('required' => 'Nie wpisano hasła.', 'max_length' => 'Zbyt długe hasło.', 'min_length' => 'Zbyt krótkie hasło.')),
  48.      
  49.      'email'   => new sfValidatorEmail(array(), array('invalid' => 'Wprowadzono bledny email.')),
  50.      
  51.      'imie' => new sfValidatorString(array('min_length' => 2, 'max_length' => 50),
  52.      array('required' => 'Imie jest wymagane.',  'min_length' => 'Imie jest za krótkie.', 'max_length' => 'Imie jest za długie.')),
  53.      
  54.      'nazwisko' => new sfValidatorString(array('min_length' => 2, 'max_length' => 100),
  55.      array('required' => 'Nazwisko jest wymagane.',  'min_length' => 'Nazwisko jest za krótkie.',
  56.      'max_length' => 'Nazwisko jest za długie.')),
  57.    ));
  58.    
  59.    
  60.  
  61.    $this->mergePostValidator(new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::EQUAL, 'password_confirmation', array(), array('invalid' => 'Hasła muszą być takie same.')));
  62.    
  63.  }
  64. }
  65. ?>



Jak po dodaniu uzytkownika probowalem ustawic za pomoca setIsActive na 0 to też nic z tego:
  1. <?php
  2. class rejestracjaActions extends sfActions
  3. {
  4.  
  5.  public function executeIndex(sfWebRequest $request)
  6.  {
  7.    $this->form = new RejestracjaForm();
  8.      if ($request->isMethod('post'))
  9.      {
  10.        $this->form->bind($request->getParameter('sf_guard_user'));
  11.        if ($this->form->isValid())
  12.        {
  13.  
  14.            $conn = Doctrine_Manager::connection();
  15. //rozpoczecie transakcji bo dodaje do dwoch tabel - uzytkownika do sf_guard_user, a jego profil do sf_guard_user_profile:
  16.            $conn->beginTransaction();
  17.            try
  18.            {
  19.                $uzytkownik = $this->form->save();
  20.                //$uzytkownik->setIsActive(0);
  21.                
  22.                 $profil = new SfGuardUserProfile();
  23.                $profil -> setUserId($uzytkownik->getId());
  24.                $profil -> setImie($this->form->getValue('imie'));
  25.                $profil -> setNazwisko($this->form->getValue('nazwisko'));
  26.                $profil -> setEmail($this->form->getValue('email'));
  27.                $profil -> save();
  28.  
  29.                $conn->commit();
  30.            }
  31.            catch (Exception $e)
  32.              {
  33.                $conn->rollBack();
  34.                throw $e;
  35.              }
  36.  
  37.        }
  38.      }
  39.  }
  40. }
  41. ?>
Ravv
Spróbuj tak:

  1. <?php
  2. //...
  3.  
  4. // zamiast:
  5. //$uzytkownik = $this->form->save();
  6. //$uzytkownik->setIsActive(0);
  7.  
  8. // spróbuj tak:
  9. $this->form->getObject()->setIsActive( 0 );
  10. $uzytkownik = $this->form->save();
  11.  
  12. // ewentualnie:
  13. $this->form->getObject()->setIsActive( false );
  14. $uzytkownik = $this->form->save();
  15.  
  16. //...
  17. ?>
nieraczek
Zrobiłem tak i działa:
  1. <?php
  2. $uzytkownik = new sfGuardUser();
  3. $uzytkownik->setUsername($this->form->getValue('username'))
  4. $uzytkownik->setPassword($this->form->getValue('password'));
  5. $uzytkownik->setIsActive(0);
  6. $uzytkownik->save();
  7. ?>


biggrin.gif
pewex
spytam z ciekawości, bo może coś przeoczyłem...
chcesz aby wszystkie konta domyslnie były nieaktywne ?

a jeśli w pliku schema.yml bezposrednio w pluginie zmienić definicję kolumny...
Kod
    is_active:      { type: boolean, required: true, default: 0 }


to czy nie osiągnie się takiego samego efektu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.