Una vista non dovrebbe toccare i cookie. La posizione dei dati memorizzati (cookie, database, tabella utente) è un dettaglio di implementazione che una vista non dovrebbe conoscere, in pratica un CRUD oggetto.
Anche registerUser($email, $remember = false)
non è una buona firma del metodo. Cosa succede se devi passare più dati per uno dei casi più tardi? Questo è difficile da estendere. Scrivi in questo caso metodi diversi per azioni diverse, register_permanent( $email )
e register_temporary( $email )
in questo caso.
Anche il modello di registrazione non dovrebbe conoscere i cookie, perché i cookie sono dettagli di una richiesta web e il livello di output (web, console, qualunque sia) è un altro dettaglio di implementazione che non dovrebbe influire su altre regole aziendali.
La registrazione conosce solo gli assegni da applicare per una registrazione. L'oggetto CRUD deve essere passato come dipendenza astratta (un'interfaccia), in modo da poterlo facilmente prendere in giro nei test delle unità.
Una soluzione eccessivamente semplificata potrebbe essere simile a questa:
interface Login_Status
{
public function log_in( $name, $data );
public function log_out( $name );
public function get_data( $name );
}
class Login_Cookie implements Login_Status
{
public function log_in( $name, $data )
{
setcookie( $name, $data, time() + 3600 * 24 * 30 );
}
public function log_out( $name )
{
setcookie( $name, '', time() + 3600 * 24 * 30 );
}
public function get_data( $name )
{
if ( ! empty ( $_COOKIE[ $name ] ) )
return $_COOKIE[ $name ];
return '';
}
}
class User_Registration
{
/**
* @type Login_Status
*/
private $login_Status;
public function __construct( Login_Status $login_Status )
{
$this->login_Status = $login_Status;
}
public function register_permanent( $email )
{
// do something with $email, maybe this:
$hash = hash( 'whirlpool', $email . 'some_salt' );
// then …
$this->login_Status->log_in( 'login', $hash );
}
}
Questi modelli sono controllati da ... beh ... il controller. La vista non è affatto coinvolta.
Si potrebbe dire che le intestazioni HTTP vengono emesse e quindi le visualizzazioni. Questo di solito è corretto. Ma in questo caso, la vista sarebbe solo un involucro sottile attorno a setcookie()
con un sovraccarico (una dipendenza da un modello). Per semplicità, non vorrei separare setcookie()
.