Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/02/2013, 12:59
Avatar de Dundee
Dundee
 
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Duda de novato en YiiFramework

Hola gente, estoy estudiando este Framework que parece potente, pero me he quedado un pelin estancado en un tema , "el login de usuario". El tema es que leo el código y lo entiendo bastante bien, pero en concreto no comprendo del todo el código de modelo LoginForm.php que es el que se encarga del login de los usuarios.

Pego el código para que se entienda mejor.
Código:
class LoginForm extends CFormModel
{
	public $username;
	public $password;
	public $rememberMe;

	private $_identity;

	/**
	 * Declares the validation rules.
	 * The rules state that username and password are required,
	 * and password needs to be authenticated.
	 */
	public function rules()
	{
		return array(
			// username and password are required
			array('username, password', 'required'),
			// rememberMe needs to be a boolean
			array('rememberMe', 'boolean'),
			// password needs to be authenticated
			array('password', 'authenticate'),
		);
	}

	/**
	 * Declares attribute labels.
	 */
	public function attributeLabels()
	{
		return array(
			'rememberMe'=>'Remember me next time',
		);
	}

	/**
	 * Authenticates the password.
	 * This is the 'authenticate' validator as declared in rules().
	 */
	public function authenticate($attribute,$params)
	{
		if(!$this->hasErrors())
		{
			$this->_identity=new UserIdentity($this->username,$this->password);
			if(!$this->_identity->authenticate())
				$this->addError('password','Incorrect username or password.');
		}
	}

	/**
	 * Logs in the user using the given username and password in the model.
	 * @return boolean whether login is successful
	 */
	public function login()
	{
		if($this->_identity===null)
		{
			$this->_identity=new UserIdentity($this->username,$this->password);
			$this->_identity->authenticate();
		}
		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
		{
			$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
			Yii::app()->user->login($this->_identity,$duration);
			return true;
		}
		else
			return false;
	}
}
No entiendo muy bien en rules() esta regla array('password', 'authenticate'), porque el modelo tiene otro método login() que realiza la misma comprobación de que el usuario es válido y crea una instancia new UserIdentity. ¿Además por qué se le pasan a authenticate dos parmámetros $attribute y $params que nunca se usan?.

Gracias de antemano.
__________________
Videotutoriales de Drupal