CakePHP 3.1 es completamente compatible con la versión 3.0. Esta página contiene los cambios y mejoras hechas en la versión 3.1.
- La clase por de ruta por defecto ha sido cambiada a
DashedRoute
en el repositoriocakephp/app
. Tu código base actual no se verá afectado por esto, pero es recomendable usar esta clase desde ahora en adelante. - Opciones de prefijos de nombre fueron añadidos a varios métodos del constructor de ruta. Ver la sección :ref:`named-routes` para obtener más información.
Shell::dispatchShell()
ya no imprimirá el mensaje de bienvenida desde el intérprete de comandos emisor.- La función ayudante
breakpoint()
ha sido añadida. Esta función provee un snippet de código que puede ser puesto eneval()
para disparar una consola interactiva. Esta función es muy útil cuando se depuran los casos de prueba, o otros scripts desde la línea de comandos interactiva (CLI). - Las opciones de consola
--verbose
y--quiet
ahora controlan stdout/stderr como niveles de registros de salida.
- Las aplicaciones de consola ahora pueden crear clases ayudantes que encapsulan bloques de salida lógica. Ver la sección :doc:`/console-and-shells/helpers` para mayor información.
- RoutesShell ha sido añadido y ahora te permite un uso simple para depurar y testear desde CLI. Ver la sección :doc:`/console-and-shells/routes-shell` para más información.
Las siguientes propiedades del Controlador están obsoletas:
- layout
- view - reemplazada con
template
- theme
- autoLayout
- viewPath - reemplazada con
templatePath
- viewClass - reemplazada con
className
- layoutPath
En lugar de ajustar estas propiedades en tu controlador, debes ajustarlos en la vista usando el método con el nombre de la propiedad:
// En un controlador, en vez de $this->layout = 'avanzado'; // Debes usar $this->viewBuilder()->layout('avanzado');
Estos métodos deben ser llamados después de determinar que clase de vista será usada para un controlador/acción.
- Una nueva opción de configuración
storage
ha sido añadida. Contiene el nombre de la clase de almacenamiento queAuthComponent
utiliza para almacenar el registro de usuario, Por defecto se usaSessionStorage
. Si se usa un autenticador sin estado debes configurarAuthComponent
para que useMemoryStorage
en su lugar. - Una nueva opción de configuración
checkAuthIn
ha sido añadida. Contiene el nombre del evento que la autenticación debe comprobar una vez realizada. Por defectoController.startup
es usado, pero tu puedes ajustar esto enController.initialize
si deseas que la autenticación compruebe antes del métodobeforeFilter()
del controlador a ejecutar. - Las opciones
scope
ycontain
para las clases autenticadoras están obsoletas. En su lugar debes usar la opciónfinder
para configurar un método localizador personalizado y modificar la consulta usada para buscar el usuario allí. - La lógica para ajustar la variable de sesión
Auth.redirect
, que se usa para obtener la URL de redirección luego de iniciar sesión, ha cambiado. Ahora se establece solo cuando se intenta acceder a una URL protegida sin autenticación. EntoncesAuth::redirectUrl()
retornará la URL protegida después de iniciar sesión. Bajo circunstancias normales, cuando un usuario accede directamente a la página de inicio de sesión,Auth::redirectUrl()
retornará el valor establecido en la configuraciónloginRedirect
.
FlashComponent
ahora apila los mensajes Flash cuando los ajustas con el métodoset()
o__call()
. Esto significa que la estructura en Session para guardar los mensajes Flash ha cambiado.
- El tiempo de expiración de la cookie CSRF ahora se podrá
ajustar como un valor compatible con
strtotime()
. - Los tokens inválidos CSRF ahora arrojarán una excepción
Cake\Network\Exception\InvalidCsrfTokenException
en vez deCake\Network\Exception\ForbiddenException
.
RequestHandlerComponent
ahora intercambia el diseño y la plantilla basado en la extensión o la cabeceraAccept
en la llamadabeforeRender()
en lugar destartup()
.addInputType()
andviewClassMap()
están obsoletos. En su lugar debes usarconfig()
para modificar estas configuraciones en tiempo de ejecución.- Cuando
inputTypeMap
oviewClassMap
están definidas en el componente de configuraciones, sobrescribirá los valores por defecto. Este cambio permite remover las configuraciones por defecto.
- El tipo mime por defecto usado para enviar peticiones ha cambiado. Previamente
usaba siempre
multipart/form-data
. En la versión 3.1,multipart/form-data
sólo es usado cuando hay archivos subidos presentes. Cuando no hay archivos subidos,application/x-www-form-urlencoded
será usado en su lugar.
Ahora puedes `Lazily Eager Load Associations`. Esta característica te permite cargar asociaciones adicionales de manera condicional dentro del resultado ajustado, entidad o colección de entidades.
Los métodos patchEntity()
y newEntity()
ahora soportan la opción onlyIds
.
Esta opción te permite restringir que las asociaciones hasMany/belongsToMany sólo usen
la lista _ids
. Esta opción por defecto es false
.
Query::notMatching()
ha sido añadido.Query::leftJoinWith()
ha sido añadido.Query::innerJoinWith()
ha sido añadido.Query::select()
ahora soporta los objetosTable
yAssociation
como parámetros. Estos tipos de parámetros seleccionarán todas las columnas de la tabla prevista o en la instancia asociada de la tabla de destino.Query::distinct()
ahora acepta una cadena para diferenciar una sola columna.Table::loadInto()
ha sido añadido.- Las funciones nativas SQL
EXTRACT
,DATE_ADD
yDAYOFWEEK
han sido abstraídas aextract()
,dateAdd()
ydayOfWeek()
respectivamente.
- Ahora puedes configurar
_serialized
atrue
paraJsonView
yXmlView
y así serializar todas las variables en vez de especificar una por una. View::$viewPath
está obsoleto. Debes usarView::templatePath()
en su lugar.View::$view
está obsoleto. Debes usarView::template()
en su lugar.View::TYPE_VIEW
está obsoleto. Debes usarView::TYPE_TEMPLATE
en su lugar.
SessionHelper
está obsoleta. Puedes usar$this->request->session()
directamente.
FlashHelper
ahora permite mostrar múltiples mensajes si fueron configuradas múltiples mensajes conFlashComponent
. Cada mensaje será mostrado en su propio elemento. Los mensajes serán mostrados en el orden que fueron configurados.
- Nueva opción
templateVars
ha sido añadida.templateVars
permite pasar variables adicionales a tu plantilla de control de formulario personalizado.
- Las clases
Email
yTransport
han sido movidas bajo el nombre de espacioCake\Mailer
. Sus antiguos espacios de nombre aún son utilizables como alias. - El perfil
default
de email es ahora automáticamente ajustado cuando una instancia deEmail
cuando es creada. Este comportamiento es similar a como era en la versión 2.x.
- La clase
Mailer
ha sido añadida. Esta clase ayuda a crear emails reusables en una aplicación.
Time::fromNow()
ha sido añadido. Este método hace fácil calcular la diferencia de tiempo desde 'ahora'.Time::i18nFormat()
ahora soporta calendarios no-gregorianos cuando formatea fechas.
Validation::geoCoordinate()
ha sido añadido.Validation::latitude()
ha sido añadido.Validation::longitude()
ha sido añadido.Validation::isInteger()
ha sido añadido.Validation::ascii()
ha sido añadido.Validation::utf8()
ha sido añadido.