2012-06-06 11 views
12

Mi intención no es hacer comparaciones o discutir qué marco es mejor. Conozco el poder de CakePHP y Rails. Estoy seguro de que hay una manera de hacer cosas similares en ambos.De Rails 3.2 a Cake PHP 2.0. ¿Cómo hacer algunas tareas comunes de Rails?

Entonces, esta es la situación: en el framework de Rails, estoy acostumbrado a hacer cosas que me gustaría hacer en CakePHP (algunas de ellas no las he encontrado en la documentación).

Ellos son:

Gestión de paquetes

En Rails, tengo el archivo "Gemfile", donde escribo la versión de cada "tesoro" que se utiliza en la aplicación. Si deseo actualizar o degradar, cambio la versión y ejecuto el comando "paquete actualizado". ¿Cómo se actualizan los complementos? ¿Usas herramientas como GIT para pagar cada una de las versiones más nuevas?

migraciones

Cuando tengo que cambiar la base de datos, se crea un archivo vacío "migración" a través del comando de consola "rieles generan la migración". Luego, en el archivo generado, agrego los cambios, como "rename_column: users,: address,: location". Después de eso, ejecuto "rake db: migrate" y la base de datos se migra. ¿Cómo hacer eso en CakePHP?

implementación automatizada

despliegue en Rails puede hacerse automatizado utilizando el "Capistrano" joya rubí. Básicamente, ejecuto "despliegue de producción de límite" en la línea de comando. Luego, según las instrucciones del archivo "deploy.rb", inicia sesión en el servidor (s), clona la versión más reciente del código del repositorio de git y hace una copia de seguridad de la versión actual para que pueda deshacerla. También puede crear enlaces simbólicos para carpetas "compartidas" (como cargas de usuarios), recompilar los activos, ejecutar migraciones pendientes, instalar nuevas dependencias, reiniciar algunos procesos de servidor, reiniciar la aplicación y ejecutar otras tareas de línea de comandos. ¿Hay algo similar en CakePHP?

activos de compresión

En Rails, cuando estoy en el modo de producción, el CSS y JS activos se compilan automáticamente en archivos individuales, y se regeneran después de cada despliegue. Esa es una característica nativa en Rails 3.1+. ¿Es eso posible en CakePHP?

trabajadores y de jobs de fondo

rieles puede utilizar una gema llamada "delayed_job" para poner en cola las tareas a ejecutar en segundo plano por los "trabajadores", como el envío de un e-mail tras el registro del usuario, por ejemplo. ¿Cómo haces eso?

espacios de nombres para los controladores de

Si quiero crear una interfaz de administración o un servicio web (utilizando el espacio de nombres "API", por ejemplo), o un espacio de nombres "móvil", que simplemente creo respectivo carpetas en la carpeta "controladores". Luego, pongo los controladores allí y creo las rutas para acceder a ellos. ¿Cuál es la mejor manera de hacer eso en Cake?

métodos modelo de acceso de vista

Parece que CakePHP devolver una matriz asociativa cuando me agarra los datos de la base de datos, y no a los verdaderos "objetos". Entonces, no puedo acceder a los métodos modelo. Supongamos que mi clase UserModel proporciona un método llamado "edad" que calcula la edad actual del usuario según su fecha de nacimiento. En Rails, podría hacer esto en la vista: <% = @ user.age%>. Necesito crear una vista de ayuda para hacer eso en Cake? Como calc_user_age ($ usuario); ?> (o algo por el estilo)? Otra situación: supongamos que quiero obtener el último comentario de un usuario, y dentro del comentario, inserte un vínculo a la publicación relacionada utilizando el título de la publicación. En Rails, haría algo como @ user.comments.last.post.title para obtener el título de la publicación. ¿Cómo podría hacer eso en Cake, sin usar esa función "recursiva = 3" que obtiene muchos datos innecesarios?

modelo de encadenamiento alcances

Supongamos que tengo un modelo denominado Post. En Rails, puedo crear ámbitos en modelos y mezclarlos de la manera que desee. Si quiero obtener las "5 últimas publicaciones publicadas de la categoría Programación ordenada por la más visitada", por ejemplo, las llamaría así: "Post.published.from_category (" programming "). Most_accessed.limit (5) ". Si solo quiero los borradores de mensajes ordenados por reciente, integrados con la paginación, llamaría "Post.drafts.recent.page (2)". ¿Cuál es la mejor manera de crear y encadenar alcances en CakePHP? ¿Construye dinámicamente un conjunto de condiciones y lo envía como el parámetro para "buscar"?

pruebas

¿Cuáles son las herramientas de prueba adoptadas por la comunidad CakePHP? Necesito probar los modelos y sus métodos, probar los controladores y sus respuestas y variables, y probar el contenido de las vistas (también interacción de Javascript), crear accesorios, etc. También sabría si hay alguna manera de crear algo como autotest, que ejecuta las pruebas después de guardar archivos.

Bueno, básicamente estos son los puntos. Perdón por la publicación larga, y por mi inglés propenso a errores y redundante (no soy un hablante nativo). Además, no soy un experto. Entonces, puedo escribir algunas cosas equivocadas aquí.

Espero que podamos tener una buena conversación. ¡Gracias!

Respuesta

12

Gestión de paquetes

yo sepa no hay hasta la fecha y gestor de paquetes utilizado ancho. Por lo general, agregamos complementos usando git. Los complementos son iguales a las gemas en RoR, creo.

Editar: Ahora es composer que es utilizado por CakePHP ahora y un montón de complementos.

migraciones

Uso del CakeDC migrations plugin o la build in schema shell.

implementación automatizada

Utilizamos fabric. Afaik no hay ningún plugin para pastel que haga que yo sepa.

compresión de activos

Use this plugin.

espacios de nombres para los controladores de

simplemente ponerlos en la carpeta de controlador y use the Router para crear rutas para ellos. De la misma manera que lo describes para Rails.

métodos modelo de acceso de vista

Eh? ¿Lo haces en Rails? No me gusta. En CakePHP no deberías hacer eso y IMO no en ninguna aplicación de MVC.

Configure los datos que necesita en las vistas desde el controlador.

$this->set('data', $this->Model->yourMethod()); 

Trabajadores & Backround Empleo

Esto se puede hacer por writing shells.

Modelos Encadenamiento

Encadenamiento de modelos en CakePHP se realiza a través associations. Y sí, serían accesibles como $ this-> User-> Post-> find ('first') por ejemplo. También puede compilar complex find queries y condiciones en varias tablas.

Pruebas de

CakePHP está utilizando phpunit para las pruebas de unidad. Lea this section al respecto en el libro de CakePHP.

Mi recomendación

Leer el libro: book.cakephp.org Definitivamente va a responder la mayoría de sus preguntas y le mostrará cómo hacer piensa. La calidad de la documentación de la versión 2.0 es excelente.

+1

Hola burzum. ¡Gracias por la respuesta! Seguramente voy a echar un vistazo. Sobre el tema "Acceder a los métodos del modelo desde la vista", creo que no fui lo suficientemente claro. Nunca recuperaría entradas de un modelo dentro de la vista. Lo hago en el controlador. Lo que podría hacer es llamar al método "edad" en el objeto '@ user' pasado a la vista, como' @ user.age' (un método que calcula dinámicamente la edad del usuario en función de su fecha de nacimiento). –

+0

Escriba un ayudante para eso, pero como se trata de una operación sobre los datos, debe hacerlo en el filtro posterior() del modelo IMO. ¿Puedo preguntarle por qué marcó la respuesta pobre, que solo responde uno de sus puntos, como correcto? – burzum

Cuestiones relacionadas