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!
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). –
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