He estado usando CodeIgniter por un tiempo, y tener un conocimiento decente de MVC, PHP, etc.Modelo Fat Skinny controlador en CodeIgniter
Sin embargo, me resulta difícil adherirse al controlador flaco Modelo grasa carácter distintivo.
He visto mucho al respecto; incluyendo qué pseudocódigo incluir en cada archivo, pero no ejemplos reales. (Por favor, enlace a algunos artículos, si me he perdido ningún obvias!)
Me resulta difícil mover la lógica forma a un modelo. Por ejemplo, estoy usando una biblioteca personalizada para mi sistema de autenticación, que tiene su propio modelo. ¿Debo hacer un modelo de usuario del sitio para registrar usuarios? ¿O debería hacer un modelo de sitio para hacer eso? O un modelo de forma?
que me ayude a cabo, alguien me puede aconsejar sobre cómo skinnify este controlador? Me doy cuenta de que es un montón de código, pero los indicadores simples serían geniales. (Tenga en cuenta, lo único que acabo de escribir este código, por lo que no se ha rediseñado mucho, pero se debe dar un buen ejemplo de cómo algunos de mis métodos están yendo de las manos.)
public function register()
{
session_start();
if ($this->tf_login->logged_in())
{
redirect('profile');
}
if ($_GET['oauth'] == 'true')
{
$type = $_GET['type'];
try
{
$token = $this->tf_login->oauth($type, '', 'email');
}
catch (TFLoginCSRFMismatchException $e)
{
$this->tf_assets->add_data('error_message', $e->getMessage());
}
catch (TFLoginOAuthErrorException $e)
{
$this->tf_assets->add_data('error_message', $e->getMessage());
}
if ($token)
{
$user_details = $this->tf_login->call('https://graph.facebook.com/me?fields=email,first_name,last_name,username&access_token=' . $token);
$user_details_decoded = json_decode($user_details);
if ($user_details_decoded->email)
{
try
{
$id = $this->tf_login->create_user($user_details_decoded->username,
md5($user_details_decoded->username . time()),
$user_details_decoded->email,
'',
TRUE,
TRUE);
}
catch (TFLoginUserExistsException $e)
{
try
{
if ($this->tf_login->oauth_login($type, $user_details_decoded->email, $token))
{
$this->session->set_flashdata('success_message', 'You have successfully logged in.');
redirect('profile');
}
else
{
$this->session->set_flashdata('error_message', 'An account with these details exists, but currently isn\'t synced with ' . $type . '. Please log in to sync the account.');
}
}
catch (Exception $e)
{
$this->session->set_flashdata('error_message', $e->getMessage());
}
}
catch (TFLoginUserNotCreated $e)
{
$this->tf_assets->add_data('error_message', 'You could not be registered, please try again.');
}
if ($id)
{
$this->tf_login->add_user_meta($id, 'first_name', $user_details_decoded->first_name);
$this->tf_login->add_user_meta($id, 'surname', $user_details_decoded->last_name);
$this->tf_login->sync_accounts($id, $type, $token);
$this->session->set_flashdata('success_message', 'Welcome ' . $this->input->post('first_name', TRUE) . ' ' . $this->input->post('surname', TRUE) . '. Your account has been sucessfully created. You will shortly receive an email with a verification link in.');
redirect('login');
}
}
else
{
$this->session->set_flash_data('error_message', 'You could not be logged in, please try again.');
}
}
// Redirect to clear URL
redirect(current_url());
}
if ($this->form_validation->run() !== FALSE)
{
try
{
$id = $this->tf_login->create_user($_POST['username'], $_POST['password'], $_POST['email'], '', FALSE);
}
catch (Exception $e)
{
$this->tf_assets->add_data('error_message', $e->getMessage());
}
if ($id)
{
$this->tf_login->add_user_meta($id, 'first_name', $_POST['first_name']);
$this->tf_login->add_user_meta($id, 'surname', $_POST['surname']);
if ($this->tf_login->register_verification_email())
{
$this->session->set_flashdata('success_message', 'Welcome ' . $this->input->post('first_name', TRUE) . ' ' . $this->input->post('surname', TRUE) . '. Your account has been sucessfully created. You will shortly receive an email with a verification link in.');
redirect('login');
}
else
{
$this->tf_login->login_user($id);
$this->session->set_flashdata('success_message','Your account has been sucessfully created.');
redirect('profile');
}
}
else
{
$this->tf_assets->add_data('error_message', $this->tf_login->get_errors());
}
}
if (validation_errors())
{
$this->tf_assets->add_data('error_message', validation_errors());
}
$this->tf_assets->set_content('public/register');
$this->tf_assets->add_data('page_title', "Register");
$this->tf_assets->render_layout();
}
Gracias ¡por adelantado!
La predicación del "Modelo de grasa" se aplica al patrón MVC original. [No es lo que hacen los frameworks PHP] (http://stackoverflow.com/questions/1549857/simple-php-mvc-framework/1549970#1549970). Tampoco te hace mucho bien con CI. Tratar el controlador como interfaz de procesamiento de formularios no es realmente un problema real. – mario
posible duplicado del [Entendimiento MVC:? ¿Cuál es el concepto de "grasa" en los modelos "flaco" en los controladores] (http://stackoverflow.com/questions/3109715/understanding-mvc-whats-the-concept-of- fat-on-models-skinny-on-controllers) – Gordon
Cuando busqué preguntas anteriores que no aparecían. Tendré una lectura, aplausos :) – Toddish