Ver Mensaje Individual
  #42 (permalink)  
Antiguo 06/10/2012, 06:36
Avatar de antonrodin
antonrodin
 
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid
Mensajes: 153
Antigüedad: 16 años, 5 meses
Puntos: 38
Respuesta: ¿Qué problema tiene Codeigniter?

Cita:
Iniciado por Fylux Ver Mensaje
Entonces, CodeIgniter, entiendo que por defecto no promueve buenas prácticas, pero tienes la posibilidad de añadirlas por tu cuenta.

¿Es cierto?
No es que no promueve, es que quizás te permita demasiado. Ahora mismo juraría que puedes acceder al modelo desde la vista, puedes no usar el modelo nunca incluso accediendo siempre desde el controlador y puedes hacer verdaderas burradas en el código...

Por ejemplo en comparación con Rails la validación de formulario la haces en el modelo SIOSI en el CI lo puedes hacer en el controlador y incluso te obligan hacerlo en el controlador... en el caso de las funciones personales callback...

El códeigniter en si o su patrón es un array estático de clases que se guarda en UNA VARIABLE EN UNA SOLA CLASE donde se van guardando todos los demás que llamas...

Yo diría que si algún día tienen que sacar el CI3 tendrían que reescribirlo desde 0... vamos un tremendo curro.

Mira este para mi es el resumen de CI:

Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class 
Sf_Controller {
    
    private static 
$instance;
    
    public function 
__construct() {
        
self::$instance =& $this;
        foreach (
is_loaded() as $var => $class) {
            
$this->$var =& load_class($class);
    }
        
$this->load =& load_class('sf_loader'); 
    }

    public static function &
get_instance() {
        return 
self::$instance;
    }
    
}
Ahí puedes observar Singleton y la función load_class que va metiendo clases que vas cargando en un array... incluido el modelo. Por eso lo llamo la gran BOLA. La clase loader, algunas funciones se podrían resumir en esto (el código de abajo), si hicieran uso de la función autoload (http://php.net/manual/en/language.oop5.autoload.php) que es una función OOP de PHP 5.

Código PHP:
 public function model($class) {
        
$Sf =& get_instance();
        
$Sf->$class = new $class;
    } 
Pero mientras están con el include(...) o require_once() del PHP4, ejemplo:

Código PHP:
public function model($model$name ''$db_conn FALSE)
    {
        if (
is_array($model))
        {
            foreach (
$model as $babe)
            {
                
$this->model($babe);
            }
            return;
        }

        if (
$model == '')
        {
            return;
        }

        
$path '';

        
// Is the model in a sub-folder? If so, parse out the filename and path.
        
if (($last_slash strrpos($model'/')) !== FALSE)
        {
            
// The path is in front of the last slash
            
$path substr($model0$last_slash 1);

            
// And the model name behind it
            
$model substr($model$last_slash 1);
        }

        if (
$name == '')
        {
            
$name $model;
        }

        if (
in_array($name$this->_ci_modelsTRUE))
        {
            return;
        }

        
$CI =& get_instance();
        if (isset(
$CI->$name))
        {
            
show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
        }

        
$model strtolower($model);

        foreach (
$this->_ci_model_paths as $mod_path)
        {
            if ( ! 
file_exists($mod_path.'models/'.$path.$model.'.php'))
            {
                continue;
            }

            if (
$db_conn !== FALSE AND ! class_exists('CI_DB'))
            {
                if (
$db_conn === TRUE)
                {
                    
$db_conn '';
                }

                
$CI->load->database($db_connFALSETRUE);
            }

            if ( ! 
class_exists('CI_Model'))
            {
                
load_class('Model''core');
            }

            require_once(
$mod_path.'models/'.$path.$model.'.php');

            
$model ucfirst($model);

            
$CI->$name = new $model();

            
$this->_ci_models[] = $name;
            return;
        }

        
// couldn't find the model
        
show_error('Unable to locate the model you have specified: '.$model);
    } 
En fin... creo que técnicamente CI esta muuuy desfasado, pero repito es cojonudo por temas de compatibilidad y proyectos medianos...
__________________
Mi blog personal... o algo asi: http://www.azrodin.com, experimentando con un concurso seo.