2012-03-19 10 views

Respuesta

25

Es posible, pero muy mala práctica en un marco MVC. Debe volver a pensar y reorganizar su código si cree que necesita usar el componente en un modelo porque algo es clemente incorrecto entonces.

Se piensa que un componente comparte el código entre los controladores, solo entre los controladores.

Para compartir código reutilizable entre los modelos que sería un comportamiento. Para una vista, sería un ayudante.

Si tiene un código realmente genérico, debe ser una lib o colocarlo en la carpeta/espacio de nombres de la Utilidad o crear un nuevo espacio de nombres. Verifique las clases existentes allí para tener una idea de qué poner ahí.

No se proporcionó ningún código por lo que no es posible dar ninguna recomendación real sobre cómo refactorizarlo. Sin embargo, la forma en que desee utilizar el código existente no funcionará en el contexto de MVC, por lo que es hora de reconsiderar su enfoque de lo que intente hacer.

+6

y se usa en diferentes lugares, sería mejor organizarlo como Lib – mark

10

Es posible usar un componente dentro de un modelo (pero no puedo comentar si es una recomendación o una práctica recomendada).

Inspirado en original source, un ejemplo de usar un componente llamado ‘Geocoder’ en un modelo:

App::import('Component','GeoCoder'); 
$gc = new GeoCoderComponent(new ComponentCollection); 

continuación, puede utilizar $gc a llamar a las funciones del componente.

-

P.S .: No quiero alentar a las malas prácticas de programación, pero a veces la presión de los plazos (en proyectos del mundo real) puedan dar lugar a un desarrollador para tomar tales decisiones.

+0

. Algunas veces nuestro sensor también nos presiona porque no se sabe qué es mvc arch (creo). – Debasis

+2

"Fechas límite" son una * muy mala * excusa para no escribir el código correcto. No es nada que requiera "trabajo", simplemente colóquelo en el lugar correcto. No hacerlo correctamente es jugar a Jenga: mover el código y acumular basura hasta que se cuelgue.Es cuestión de minutos mover el código en el lugar correcto, excepto que toda la "arquitectura" ya está completamente arruinada. Acabará con un lío inmanejable que será horrible de mantener y depurar en algún momento. – burzum

+0

Usted confunde mis intenciones. Solía ​​leer Code Complete 2 en la universidad, por lo que escribiré mejor código profesionalmente. Leí los estándares de PSR en su propio tiempo, para poder implementarlos en mi trabajo diario. Espero dejar claro de dónde vengo: soy un "programador de OCD perfeccionista", y no me atrevería a cortar las esquinas con mi código. Aprendo algo nuevo todos los días, y la misma tarea que hago seis meses después será más eficiente, esto acepto. –

-1

@ AD7six

// Use anywhere 
AuthComponent::user('id') 

// From inside a controller 
$this->Auth->user('id'); 

De la documentación de PHP torta Proporcionan AuthComponent::user('id') para que pueda ser utilizado en lugares distintos de un controlador.

Tal vez necesito una pista más grande, pero ¿por qué mi modelo no debería poder acceder a la información de ACL?

Cuestiones relacionadas