2012-03-24 9 views
5

estoy probar algo de esta idea comentario Code Igniter Controller/Model name conflictscontrolador de CodeIgniter y el modelo con el mismo nombre Collison

hallazgo nombre de la clase variable sobre núcleo/CodeIgniter.php:

$class = $RTR->fetch_class(); y cambiar así:
$class = 'Controller' . $RTR->fetch_class();

ahora cambiar el nombre del controlador:

class ControllerUser extends CI_Controller { ...

Funciona, ahora puedo usar el modelo de usuario y el controlador de usuario. Pero mi pregunta es, ¿tiene sentido? o ¿El problema? (lo siento, mi inglés malo)

+0

Es por eso que debe intentar encontrar un marco que le permita trabajar con PHP5.3 [espacios de nombres] (http://php.net/manual/en/language.namespaces.php). Por mucho que odie ese marco, FuelPHP podría ser el paso lógico para ti. Es una bifurcación CI bastante nueva. Eso es, por supuesto, si usted tiene control sobre qué marco se utiliza o si se encuentra en la etapa en que es posible. Si no, solo guárdalo para que lo tomes en cuenta cuando retires el próximo proyecto. –

+0

No sé de dónde sacas la idea del FuelPHP es una bifurcación de CI. No es, está construido desde cero, no tiene nada en común con CI y no es compatible. – WanWizard

Respuesta

5

Para solucionar este problema, normalmente la mayoría de la gente agrega el sufijo '_model' a los nombres de las clases Modelo

Creo que es mejor añadir un sufijo a los controladores en su lugar, ya que casi nunca son referenciados por su clase nombres en tu código

Primero debemos extender la clase de Enrutador.

Cree este archivo: “application/libraries/MY_Router.php”

class MY_Router extends CI_Router { 
    var $suffix = '_controller'; 

    function __construct() { 
     parent::CI_Router(); 
    } 

    function set_class($class) { 
     $this->class = $class . $this->suffix; 
    } 

    function controller_name() { 

     if (strstr($this->class, $this->suffix)) { 
      return str_replace($this->suffix, '', $this->class); 
     } 
     else { 
      return $this->class; 
     } 

    } 
} 

Ahora editar “sistema/CodeIgniter/CodeIgniter.php”

línea 153:

if (! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT)) 

línea 158:

include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT); 

A continuación, editar: “Sistema/bibliotecas/Profiler.php”, línea 323:

$output .= " 
<div style="color:#995300;font-weight:normal;padding:4px 0 4px 0">".$this->CI->router->controller_name()."/".$this->CI->router->fetch_method()."</div>"; 

Source

+0

no funcionó. 404 No encontrado. – musa

+0

@musa, eso fue con la solución hmvc, Verifique mi edición y actualice – Starx

+0

¿no debería ser 'parent :: __ construct()'? Desde PHP5, ha habido un cambio en la forma en que se realiza la construcción ... luego, CI sigue siendo marcos semi-php4. –

1

Yup this makes sennce. Codeigniter es un marco estricto orientado a objetos. Esto significa que cuando tienes 2 o más objetos con el mismo nombre, el nombre del objeto no es lo suficientemente único.

En su caso, un modelo es un procesador de datos y un controlador de la clase que conecta su vista con el modelo. Por lo que lógicamente debe nombrarlo algo como esto:

Su modelo será: "Model_User", "DB_USER" o "UserList"

Su controlador será: "Usuario", Controller_User o UserController

En el caso del modelo sugiero que use Db_User (nombres cortos pero claros) y en el caso de los controladores sugiero que use "Usuario" (abreviatura y la clase que define al usuario cuando se combina con el modelo y la vista para ese usuario)

Nunca tuve problemas al usar mis sistemas Codeigniter como este

+0

No estoy usando el plural porque estoy hablando de una lista o una tabla. Los usuarios, por ejemplo, son propiedades estrictamente habladas de una lista –

7

yo no modificar el núcleo de CodeIgniter. Cuando actualices, perderás ese cambio.

He hecho dos cosas en el pasado: 1. Nombrado mis modelos User_model 2. Nombrado mis controladores como plurales, y mis modelos como singulares.

Lo hago ahora. Esto semánticamente también tiene sentido, porque el nombre del controlador está en la URL, por lo que las rutas se ven como ruta_aplicación/usuarios/nombre de usuario. Además, el modelo generalmente modela a un solo usuario, por lo que también tiene sentido.

También puede seguir una cierta discusión de la comunidad sobre esta cuestión aquí: http://codeigniter.uservoice.com/forums/40508-codeigniter-reactor/suggestions/1269847-controller-prefixes

+0

Estoy usando datamapper, por lo que no quiero hacer User_model. pero sí, modelos de Usuario, controladores que los Usuarios pueden ser. también encontré esto http://phpfour.com/blog/2009/09/codeigniter-controller-naming-convention-modified/ ¿qué piensas? – musa

+0

en lo que respecta al n. ° 2, hasta ahora tiene sentido, y creo que esto es un poco más amistoso con el SEO, pero me gustaría obtener más referencias al respecto. – Jahmic

1

¿Por qué no acaba de hacer sus controladores singular y su modelos/db tablas plural?

Cuestiones relacionadas