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 repositorio cakephp/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 Using 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 en eval()
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 Shell 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 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 que AuthComponent
utiliza para almacenar el registro de
usuario, Por defecto se usa SessionStorage
. Si se usa un autenticador sin estado
debes configurar AuthComponent
para que use MemoryStorage
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 defecto Controller.startup
es usado, pero tu puedes ajustar esto en Controller.initialize
si deseas que la autenticación
compruebe antes del método beforeFilter()
del controlador a ejecutar.
Las opciones scope
y contain
para las clases autenticadoras están obsoletas.
En su lugar debes usar la opción finder
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. Entonces Auth::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ón loginRedirect
.
FlashComponent
ahora apila los mensajes Flash cuando los ajustas con el
método set()
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 de
Cake\Network\Exception\ForbiddenException
.
RequestHandlerComponent
ahora intercambia el diseño y la plantilla basado en la extensión
o la cabecera Accept
en la llamada beforeRender()
en lugar de startup()
.
addInputType()
and viewClassMap()
están obsoletos. En su lugar debes usar
config()
para modificar estas configuraciones en tiempo de ejecución.
Cuando inputTypeMap
o viewClassMap
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 objetos Table
y Association
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
y DAYOFWEEK
han sido
abstraídas a extract()
, dateAdd()
y dayOfWeek()
respectivamente.
Ahora puedes configurar _serialized
a true
para JsonView
y XmlView
y así serializar todas las variables en vez de especificar una por una.
View::$viewPath
está obsoleto. Debes usar View::templatePath()
en su lugar.
View::$view
está obsoleto. Debes usar View::template()
en su lugar.
View::TYPE_VIEW
está obsoleto. Debes usar View::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 con FlashComponent
. 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
y Transport
han sido movidas bajo el nombre de espacio Cake\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 de Email
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.