{"id":63112,"date":"2023-02-21T09:47:32","date_gmt":"2023-02-21T08:47:32","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=63112&#038;preview=true&#038;preview_id=63112"},"modified":"2025-01-17T14:24:52","modified_gmt":"2025-01-17T13:24:52","slug":"laravel-10","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/","title":{"rendered":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas"},"content":{"rendered":"<p>Tras m\u00e1s de una d\u00e9cada desde la introducci\u00f3n del popular\u00edsimo <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\">framework Laravel<\/a>, \u00bfte has preguntado alguna vez: \u00ab\u00bfQu\u00e9 m\u00e1s puede ofrecer Laravel a los desarrolladores de PHP?\u00bb<\/p>\n<p>Teniendo en cuenta lo mucho que ha simplificado el desarrollo PHP tanto para principiantes como para desarrolladores profesionales, algunos podr\u00edan incluso afirmar que ha malcriado a los desarrolladores haci\u00e9ndoles creer que PHP es el lenguaje de programaci\u00f3n m\u00e1s f\u00e1cil que existe.<\/p>\n\n<p>Entonces, \u00bftiene Laravel a\u00fan m\u00e1s sorpresas reservadas para los <a href=\"https:\/\/kinsta.com\/es\/blog\/desarrollador-de-laravel\/\">desarrolladores de Laravel<\/a>? \u00bfO ha agotado todos los medios posibles para ayudar a los desarrolladores de PHP?<\/p>\n<p>Bueno, al menos, sabemos que Laravel 10 tiene mucho que ofrecer. Esto es lo que vamos a descubrir en este art\u00edculo mientras te llevamos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones y m\u00e9todos y paquetes que acaban de quedarse obsoletos.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Calendario de Lanzamientos de Laravel<\/h2>\n<p>El core team de Laravel sol\u00eda lanzar dos versiones principales al a\u00f1o (una cada seis meses).<\/p>\n<p>Sin embargo, el ciclo de publicaci\u00f3n cambi\u00f3 cuando Taylor Otwell, creador de Laravel, <a href=\"https:\/\/blog.laravel.com\/updates-to-laravels-versioning-policy\" target=\"_blank\" rel=\"noopener noreferrer\">anunci\u00f3<\/a> que ahora se publicar\u00eda una \u00fanica versi\u00f3n principal al a\u00f1o. Esto permiti\u00f3 al core team y a la comunidad dedicar m\u00e1s tiempo y esfuerzo a una versi\u00f3n concreta del framework e introducir nuevas y potentes funciones sin realizar cambios de \u00faltima hora.<\/p>\n<p>El lanzamiento de Laravel 10 estaba previsto para el 7 de febrero de 2023, tras el lanzamiento de <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-9\/\">Laravel 9<\/a> el 8 de febrero de 2022. Sin embargo, el equipo necesit\u00f3 m\u00e1s tiempo para finalizar su obra de arte, y Laravel 10 se public\u00f3 finalmente el 14 de febrero de 2023.<\/p>\n<p>Ahora se espera que Laravel 11 se lance en en la primera quincena de febrero de 2024.<\/p>\n<p>Adem\u00e1s, seg\u00fan la <a href=\"https:\/\/laravel.com\/docs\/10.x\/releases#support-policy\" target=\"_blank\" rel=\"noopener noreferrer\">pol\u00edtica de soporte<\/a>, se ofrecen correcciones de errores durante 18 meses y actualizaciones de seguridad durante dos a\u00f1os para todas las versiones de Laravel.<\/p>\n<p>A continuaci\u00f3n se indica el calendario previsto de correcciones de errores y actualizaciones de seguridad:<\/p>\n<ul>\n<li>Laravel 9 seguir\u00e1 recibiendo correcciones de errores hasta el 8 de agosto de 2023 y correcciones de seguridad hasta el 6 de febrero de 2024.<\/li>\n<li>Laravel 10 recibir\u00e1 correcciones de errores hasta el 6 de agosto de 2024 y correcciones de seguridad hasta el 4 de febrero de 2025.<\/li>\n<li>Se espera que Laravel 11 reciba correcciones de errores hasta el 5 de agosto de 2025 y correcciones de seguridad hasta el 3 de febrero de 2026.<\/li>\n<\/ul>\n<h2>\u00bfDeber\u00edas Actualizar a Laravel 10?<\/h2>\n<p>Es importante recordar que no siempre es necesario actualizar la versi\u00f3n de Laravel de nuestra aplicaci\u00f3n a la \u00faltima versi\u00f3n en cuanto sale una nueva versi\u00f3n.<\/p>\n<p>Laravel es un framework de c\u00f3digo abierto, lo que implica que cada vez que instalamos una nueva instancia de Laravel en nuestra m\u00e1quina, somos propietarios del c\u00f3digo base del framework. Esto significa que aunque la versi\u00f3n del framework que utiliza nuestra aplicaci\u00f3n ya no est\u00e9 soportada, la aplicaci\u00f3n seguir\u00e1 funcionando; s\u00f3lo tendremos que mantenerla nosotros mismos.<\/p>\n<p>Como resultado, se suele sugerir que se d\u00e9 prioridad a la estabilidad de las aplicaciones antes que a las actualizaciones del framework.<\/p>\n<p>En resumen, deber\u00edas plantearte actualizar a Laravel 10 cuando:<\/p>\n<ul>\n<li>La aplicaci\u00f3n es estable con su versi\u00f3n actual y funciona sin problemas.<\/li>\n<li>La nueva versi\u00f3n a\u00f1ade una caracter\u00edstica que tu aplicaci\u00f3n necesita o soluciona un problema que tu aplicaci\u00f3n est\u00e1 experimentando.<\/li>\n<li>La aplicaci\u00f3n se probar\u00e1 a fondo antes de que los cambios de la actualizaci\u00f3n se pasen a producci\u00f3n.<\/li>\n<\/ul>\n<h2>Actualizaciones de Laravel 10<\/h2>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-21.png\" alt=\"El logotipo de Laravel 10 con la palabra \"Laravel\" en naranja brillante y el \"10\" en gris.\" width=\"1024\" height=\"576\"><figcaption class=\"wp-caption-text\">Laravel 10.<\/figcaption><\/figure>\n<p>Kinsta es un gran fan de Laravel. Por eso hemos reunido los aspectos m\u00e1s destacados de Laravel 10 en un \u00fanico art\u00edculo para que te sirva de referencia y gu\u00eda para utilizar todas las novedades. Por lo tanto, te recomendamos marcar esta p\u00e1gina y volver a visitarla de vez en cuando.<\/p>\n<h3>Nuevas Funciones y Actualizaciones de Laravel 10<\/h3>\n<p>No hay duda de que la parte m\u00e1s emocionante de cualquier nueva versi\u00f3n es la incorporaci\u00f3n de nuevas funciones. As\u00ed que sin m\u00e1s pre\u00e1mbulos, empecemos echando un vistazo a las nuevas caracter\u00edsticas y actualizaciones de Laravel 10.<\/p>\n<h4>1. PHP 8.1: En el Coraz\u00f3n de Laravel 10<\/h4>\n<p>PHP 8.1 es la versi\u00f3n PHP m\u00ednima requerida en Laravel 10. Algunas caracter\u00edsticas de PHP 8.1, como las propiedades readonly y array_is_list, se utilizan en Laravel 10.<\/p>\n<h4>2. Soporte para PHP 8.2<\/h4>\n<p>PHP 8.2 fue lanzado el 8 de diciembre de 2022, s\u00f3lo dos meses antes de la fecha de lanzamiento de Laravel 10. Sin embargo, esto no deber\u00eda impedirte utilizar las caracter\u00edsticas de PHP 8.2, ya que sin hacer nada extra, Laravel 10 est\u00e1 preparado para PHP 8.2.<\/p>\n<p>De hecho, todo el ecosistema Laravel, incluyendo Forge, Vapor y Envoyer, es compatible con PHP 8.2, e incluso puedes utilizar <a href=\"https:\/\/blog.laravel.com\/laravel-loves-php-82\" target=\"_blank\" rel=\"noopener noreferrer\">PHP 8.2 con Laravel 9<\/a>. \u00bfNo es genial?<\/p>\n<h4>3. Actualizaci\u00f3n de los Paquetes Oficiales de Laravel<\/h4>\n<p>No s\u00f3lo el framework se mantiene profesionalmente y se actualiza con regularidad, sino tambi\u00e9n todos los paquetes oficiales y el ecosistema.<\/p>\n<p>La siguiente es una lista de los paquetes oficiales de Laravel m\u00e1s recientes que se han actualizado para dar soporte a Laravel 10:<\/p>\n<ol>\n<li>Breeze<\/li>\n<li>Cashier Stripe<\/li>\n<li>Dusk<\/li>\n<li>Horizon<\/li>\n<li>Installer<\/li>\n<li>Jetstream<\/li>\n<li>Passport<\/li>\n<li>Pint<\/li>\n<li>Sail<\/li>\n<li>Scout<\/li>\n<li>Valet<\/li>\n<\/ol>\n<p>Otro regalo para los fans de Rails, Vue, React y Svelte, <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-inertia\/\">Inertiajs 1.0.1<\/a> tambi\u00e9n es compatible con Laravel 10.<\/p>\n<h4>4. Actualizaci\u00f3n de la Versi\u00f3n de Predis<\/h4>\n<p>Predis es un robusto cliente <a href=\"https:\/\/kinsta.com\/es\/blog\/base-datos-en-memoria\/\">Redis<\/a> para PHP que puede ayudarte a sacar el <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-caching\/\">m\u00e1ximo partido del almacenamiento en cach\u00e9<\/a> para ofrecer una fant\u00e1stica experiencia de usuario. Anteriormente Laravel soportaba las versiones 1 y 2, pero a partir de Laravel 10, el framework ya no soporta Predis 1.<\/p>\n<p>Aunque la documentaci\u00f3n de Laravel <a href=\"https:\/\/laravel.com\/docs\/10.x\/redis\" target=\"_blank\" rel=\"noopener noreferrer\">menciona Predis<\/a> como el paquete para interactuar con Redis, tambi\u00e9n puedes utilizar la <a href=\"https:\/\/github.com\/phpredis\/phpredis\/\" target=\"_blank\" rel=\"noopener noreferrer\">extensi\u00f3n oficial de PHP<\/a>. Esta extensi\u00f3n proporciona una API para comunicarse con los servidores Redis.<\/p>\n<h4>5. Declaraciones Nativas de Tipos<\/h4>\n<p>Laravel sol\u00eda utilizar DocBlocks en su esqueleto de c\u00f3digo para aclarar qu\u00e9 hace un trozo de c\u00f3digo y qu\u00e9 tipo de par\u00e1metros o respuestas esperar. Sin embargo, gracias a las declaraciones nativas de tipos en Laravel 10, esto cambiar\u00e1.<\/p>\n<p>La mejor forma de explicar este cambio es con un ejemplo sencillo. En lugar de que una funci\u00f3n tenga este aspecto:<\/p>\n<pre><code class=\"language-php\">\/**\n* Determine whether the user can create models.\n*\n* @param {{ namespacedUserModel }} $user\n* @return IlluminateAuthAccessResponse|bool\n*\/\n\npublic function create({{ user }} $user)\n{\n  \/\/\n}<\/code><\/pre>\n<p>&#8230;tendr\u00e1 este aspecto:<\/p>\n<pre><code class=\"language-php\">\/**\n* Determine whether the user can create models.\n*\/\n\npublic function create({{ user }} $user): bool\n{\n  \/\/\n}<\/code><\/pre>\n<p>Este cambio es puramente en beneficio de la experiencia del desarrollador, ya que los IDE conocer\u00e1n la forma del par\u00e1metro y la respuesta esperados. Proporcionar\u00e1 una mayor claridad de los tipos cuando no sea posible mediante los tipos nativos de PHP. Por lo tanto, ayudar\u00e1 a los editores de c\u00f3digo a funcionar mejor con las funciones de autocompletar.<\/p>\n<h4>6. Todas las Reglas de Validaci\u00f3n Invocables por Defecto<\/h4>\n<p>Si quisieras hacer una regla de validaci\u00f3n invocable en Laravel 9, tendr\u00edas que a\u00f1adir una bandera <code>--invokable<\/code> despu\u00e9s del comando Artisan. Esto ya no es necesario porque todas las reglas de Laravel 10 son invocables por defecto. Por lo tanto, puedes ejecutar el siguiente comando para crear una nueva regla invocable en Laravel 10:<\/p>\n<pre><code class=\"language-php\">php artisan make:rule CustomRule<\/code><\/pre>\n<h4>7. Soporte Nativo de Modificaci\u00f3n de Columnas<\/h4>\n<p>En un intento de eliminar la necesidad del paquete DBAL (<code>doctrine\/dbal<\/code>) cuando se utiliza <code>change()<\/code> para modificar columnas, se ha introducido una nueva caracter\u00edstica en Laravel 10 que permite a los desarrolladores utilizar el m\u00e9todo <code>change()<\/code> y modificar columnas con <a href=\"https:\/\/kinsta.com\/es\/blog\/postgresql-vs-sql-server\/\">MySQL, PostgreSQL<\/a> y <a href=\"https:\/\/kinsta.com\/es\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a> sin necesidad de paquetes adicionales. Se trata de un <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45487#issuecomment-1371500000\">cambio importante y arriesgado<\/a>, pero creemos que merece la pena, ya que eliminar\u00e1 la dependencia de un paquete adicional.<\/p>\n<p>Para comprender mejor la nueva funci\u00f3n, consulta el siguiente ejemplo:<\/p>\n<pre><code class=\"language-php\">$table-&gt;integer('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance'); \/\/ `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'<\/code><\/pre>\n<p>Ahora, supongamos que tenemos una columna para <code>user_balance<\/code> y queremos cambiar su tipo. A partir de Laravel 10, podemos hacer simplemente esto:<\/p>\n<pre><code class=\"language-php\">$table-&gt;bigInteger('user_balance')-&gt;change(); \/\/ This will change `user_balance` to bigInteger instead of just integer<\/code><\/pre>\n<p>El c\u00f3digo anterior cambiar\u00e1 con \u00e9xito el tipo de la columna, pero tambi\u00e9n eliminar\u00e1 los atributos <code>UNSIGNED<\/code>, <code>DEFAULT<\/code> y <code>COMMENT<\/code>. Por lo tanto, es importante que recuerdes a\u00f1adir todos los atributos cuando vayas a cambiar el tipo de una columna:<\/p>\n<pre><code class=\"language-php\">$table-&gt;bigInteger('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance')-&gt;change();<\/code><\/pre>\n<p>En el caso de que tengas varias <a href=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\">conexiones a bases de datos<\/a> y ya hayas instalado DBAL, se recomienda llamar al m\u00e9todo <code>Schema::useNativeSchemaOperationsIfPossible()<\/code> dentro del m\u00e9todo de arranque en <code>AppProvidersAppServiceProvider<\/code> para poder utilizar operaciones de esquema nativas y utilizar operaciones nativas antes de depender del paquete (SQLite, por ejemplo, a\u00fan no lo admite):<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesSchema;\nclass AppServiceProvider extends ServiceProvider\n{\n  public function boot()\n  {\n    Schema::useNativeSchemaOperationsIfPossible();\n  }\n}<\/code><\/pre>\n<h4>8. Recuperaci\u00f3n Nativa de Tipo de Columna<\/h4>\n<p>Otra caracter\u00edstica destacable de Laravel 10 es la posibilidad de utilizar el m\u00e9todo <code>Schema::getColumnType<\/code> sin tener que depender del paquete <code>doctrine\/dbal<\/code>. Actualmente utilizamos <code>Schema::getColumnType<\/code> con DBAL para obtener el tipo de columna. DBAL mapea cada tipo de columna nativo a su equivalente de tipo DBAL, y no admite muchos de los tipos de columna utilizados por Laravel en varias bases de datos.<\/p>\n<p>En Laravel 10, en cambio, el nuevo m\u00e9todo <code>Schema::getColumnType<\/code> devolver\u00e1 el tipo de columna real en lugar de su equivalente DBAL. Tambi\u00e9n te permite escribir pruebas de integraci\u00f3n para la nueva funci\u00f3n nativa de modificaci\u00f3n de columnas. Puedes utilizar esta funci\u00f3n para obtener el nombre del tipo de datos o la definici\u00f3n completa del tipo de la columna especificada:<\/p>\n<pre><code class=\"language-php\">Schema::getColumnType('products', 'price'); \/\/ decimal<\/code><\/pre>\n<h4>9. Algoritmo Hashing M\u00e1s R\u00e1pido<\/h4>\n<p>xxHash es un algoritmo Hash incre\u00edblemente r\u00e1pido. Presenta una gran aleatoriedad y dispersi\u00f3n de salida, as\u00ed como unicidad para reducir las colisiones. Dado que PHP 8.1 proporciona soporte para xxh128, y dado que Laravel 10 se ejecuta sobre PHP 8.1, tener un algoritmo hash tan fiable dentro de Laravel 10 es ideal.<\/p>\n<p>Vale la pena mencionar que <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45371#issuecomment-1359597016\" target=\"_blank\" rel=\"noopener noreferrer\">Taylor destac\u00f3<\/a> durante su revisi\u00f3n de este cambio que algunos paquetes de terceros pueden depender de que los nombres de archivo tengan el formato exacto del hash SHA-1, que es el algoritmo que Laravel sol\u00eda utilizar para el hash. Por lo tanto, si est\u00e1s planeando una actualizaci\u00f3n a Laravel 10, ser\u00eda prudente comprobar esto dos veces en cualquier paquete de terceros que est\u00e9s utilizando en tu aplicaci\u00f3n.<\/p>\n<h4>10. <code>whereExists()<\/code> Soporte de M\u00e9todos para Eloquent Builder<\/h4>\n<p>Actualmente, el uso de <code>whereExists()<\/code> requiere configurar la consulta anidada mediante un cierre. Afortunadamente, con Laravel 10, ahora es posible incluir un Eloquent Builder como consulta anidada. Esto permite utilizar m\u00e9todos personalizados del constructor, \u00e1mbitos del modelo, etc.<\/p>\n<p>Por ejemplo, normalmente hacemos esto si queremos utilizar <code>whereExists()<\/code>:<\/p>\n<pre><code class=\"language-php\">Order::whereExists(function ($query) {\n  $query-&gt;from('products')-&gt;whereColumn('products.order_id', 'orders.id');\n});<\/code><\/pre>\n<p>Con Laravel 10, podemos hacer esto en su lugar:<\/p>\n<pre><code class=\"language-php\">Order::whereExists(\n  Product::whereColumn('products.order_id', 'orders.id')\n);<\/code><\/pre>\n<h4>11. Optimizaci\u00f3n de la Carga Eager<\/h4>\n<p>Una de las novedades interesantes de Laravel 10 es la <a href=\"https:\/\/kinsta.com\/es\/blog\/rendimiento-laravel\/#11-make-use-of-eager-loading\">optimizaci\u00f3n de la eager<\/a> cuando no hay claves que cargar. Este cambio es m\u00e1s una correcci\u00f3n que una caracter\u00edstica, ya que aborda un problema actual en el que las relaciones de carga eager provocan que se ejecuten un gran n\u00famero de consultas imposibles.<\/p>\n<p>Actualmente, cuando se realiza eager-loading de relaciones que no tienen claves que cargar, Laravel ejecutar\u00e1 una consulta similar a esta:<\/p>\n<pre><code class=\"language-php\">select * from `table_name` where 0 = 1<\/code><\/pre>\n<p>Sin embargo, la nueva actualizaci\u00f3n de Laravel 10 comprueba en primer lugar si hay alguna clave disponible y, si no la hay, proporciona una colecci\u00f3n vac\u00eda, eliminando la necesidad de realizar consultas innecesarias a la base de datos.<\/p>\n<h4>12. <code>$path<\/code> Opcional para M\u00e9todos de Sistema de Archivos<\/h4>\n<p>En Laravel 10, el par\u00e1metro <code>$path<\/code> es opcional para los siguientes m\u00e9todos:<\/p>\n<ul>\n<li><code>FilesystemAdapter#putFile<\/code><\/li>\n<li><code>FilesystemAdapter#putFileAs<\/code><\/li>\n<li><code>UploadedFile#store<\/code><\/li>\n<li><code>UploadedFile#storeAs<\/code><\/li>\n<li><code>UploadedFile#storePublicly<\/code><\/li>\n<li><code>UploadedFile#storePubliclyAs<\/code><\/li>\n<\/ul>\n<p>As\u00ed que en lugar de hacer esto para almacenar un archivo subido en <a href=\"https:\/\/kinsta.com\/es\/blog\/amazon-s3-backups\/\">Amazon S3<\/a>:<\/p>\n<pre><code class=\"language-php\">Storage::disk('s3')-&gt;putFile(\u2018post\/images', $uploadedFile);<\/code><\/pre>\n<p>&#8230;podemos hacer esto:<\/p>\n<pre><code class=\"language-php\">Storage::disk(Disk::PostImages)-&gt;putFile($uploadedFile)<\/code><\/pre>\n<h4>13. Expresiones de Bases de Datos y Formato Espec\u00edfico de la Gram\u00e1tica<\/h4>\n<p>S\u00f3lo cuatro d\u00edas antes del lanzamiento de Laravel 10, el core team de Laravel decidi\u00f3 fusionar una excelente funcionalidad que resuelve un gran desaf\u00edo cuando se trabaja con m\u00faltiples bases de datos.<\/p>\n<p>En versiones anteriores, si trabaj\u00e1bamos con PostgreSQL y MySQL y quer\u00edamos devolver el primer valor de una lista como un alias, ten\u00edamos que escribir c\u00f3digo de base de datos sin procesar y hacer lo siguiente:<\/p>\n<pre><code class=\"language-php\">DB::table(\u2018visitors')\n-&gt;when(isPostgreSQL(), fn ($query) =&gt; $query-&gt;select(DB::raw('coalesce(NULL, \"user\", \"guest\") AS \"First Visitor\"')))\n-&gt;when(isMySQL(), fn ($query) =&gt; $query-&gt;select(DB::raw('coalesce(NULL, `user`, `guest`) AS `First Visitor`')))<\/code><\/pre>\n<p>En el c\u00f3digo anterior, estamos utilizando la <a href=\"https:\/\/www.w3schools.com\/sql\/func_sqlserver_coalesce.asp\" target=\"_blank\" rel=\"noopener noreferrer\">funci\u00f3n<code>COALESCE()<\/code><\/a> para devolver el primer valor no nulo como un alias llamado <strong>primer visitante<\/strong>. As\u00ed, cada vez que necesit\u00e1ramos realizar una operaci\u00f3n como \u00e9sta, tendr\u00edamos que volver a escribir c\u00f3digo de base de datos sin procesar.<\/p>\n<p>La nueva funci\u00f3n nos permite crear clases de expresi\u00f3n reutilizables que implementen las expresiones y sentencias raw que necesitamos para nuestras consultas una sola vez. Esto eliminar\u00e1 la necesidad de escribir c\u00f3digo de base de datos sin procesar cuando queramos utilizar m\u00e1s funcionalidades de la base de datos.<\/p>\n<p>Volviendo al ejemplo anterior, sigamos el nuevo enfoque de Laravel 10 para conseguir el mismo resultado pero sin utilizar sintaxis de c\u00f3digo de base de datos sin procesar.<\/p>\n<p>En primer lugar, tendr\u00edamos que crear dos clases: una para el aliasing y otra para utilizar la funci\u00f3n <code>COALESCE()<\/code>:<\/p>\n<pre><code class=\"language-php\">class Alias implements Expression\n{\n  public function __construct(\n    public readonly Expression|string $expression,\n    public readonly string $name,\n  ) { }\n  public function getValue(Grammar $grammar): string\n  {\n    return match ($grammar-&gt;isExpression($this-&gt;expression)) {\n      true =&gt; \"{$grammar-&gt;getValue($this-&gt;expression)} as {$grammar-&gt;wrap($this-&gt;name)}\",\n      false =&gt; $grammar-&gt;wrap(\"{$this-&gt;name} as {$this-&gt;name}\"),\n    };\n  }\n}\nclass Coalesce implements Expression\n{\n  public function __construct(\n    public readonly array $expressions,\n  ) { }\n  public function getValue(Grammar $grammar): string\n  {\n    $expressions = array_map(function ($expression) use($grammar): string {\n      return match ($grammar-&gt;isExpression($expression)) {\n        true =&gt; $grammar-&gt;getValue($expression),\n        false =&gt; $grammar-&gt;wrap($expression),\n      };\n    }, $this-&gt;expressions);\n    $expressions = implode(', ', $expressions);\n    return \"coalesce({$expressions})\";\n  }\n}<\/code><\/pre>\n<p>Entonces, podemos hacer esto para conseguir el resultado deseado tanto para MySQL como para PostgreSQL:<\/p>\n<pre><code class=\"language-php\">DB::table('visitors') -&gt;select(new Alias(new Coalesce([NULL, 'user', 'guest']), 'First Visitor'));<\/code><\/pre>\n<p>Podr\u00edas pensar que escribirlo es demasiado trabajo, pero sin duda merece la pena porque s\u00f3lo tendr\u00e1s que escribirlo una vez y te evitar\u00e1 la molestia de cambiar de sintaxis cuando trates con varias bases de datos.<\/p>\n<p>Adem\u00e1s, seg\u00fan el creador del <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/44784\" target=\"_blank\" rel=\"noopener noreferrer\">pull request<\/a>, Tobias Petry, este cambio abrir\u00e1 la puerta a numerosas posibilidades para que los paquetes te proporcionen las clases de expresiones brutas m\u00e1s comunes. Incluso afirm\u00f3 que lo proporcionar\u00e1 a la comunidad en un <a href=\"https:\/\/github.com\/tpetry\/laravel-query-expressions\" target=\"_blank\" rel=\"noopener noreferrer\">paquete dedicado<\/a> tras el lanzamiento de Laravel 10.<\/p>\n<h4>14. Actualizaci\u00f3n de SQL Server para Utilizar <code>FETCH<\/code> y <code>OFFSET<\/code> en Queries que No incluyan un <code>orderBy<\/code><\/h4>\n<p>Cuando utilizamos <code>orderBy<\/code> en una query como \u00e9sta:<\/p>\n<pre><code class=\"language-php\">$builder-&gt;select('*')-&gt;from('users')-&gt;skip(11)-&gt;take(10)-&gt;orderBy('email', 'desc');<\/code><\/pre>\n<p>Laravel produce entonces una sentencia SQL que utiliza <a href=\"https:\/\/www.geeksforgeeks.org\/sql-offset-fetch-clause\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>FETCH<\/code> y <code>OFFSET<\/code><\/a>:<\/p>\n<pre><code class=\"language-sql\">select * from [users] order by [email] desc offset 11 rows fetch next 10 rows only<\/code><\/pre>\n<p>Sin embargo, en versiones anteriores de Laravel, si eliminamos <code>orderBy<\/code> de la query, se vuelve al antiguo m\u00e9todo de compensar los resultados:<\/p>\n<pre><code class=\"language-php\">$builder-&gt;select('*')-&gt;from('users')-&gt;skip(11)-&gt;take(10);<\/code><\/pre>\n<pre><code class=\"language-sql\">select * from (select *, row_number() over (order by (select 0)) as row_num from [users]) as temp_table where row_num between 11 and 20 order by row_num<\/code><\/pre>\n<p>Pero ahora en Laravel 10, esta <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/44937\" target=\"_blank\" rel=\"noopener noreferrer\">nueva actualizaci\u00f3n<\/a> permitir\u00e1 a tu aplicaci\u00f3n Laravel 10 utilizar <code>FETCH<\/code> y <code>OFFSET<\/code> incluso cuando <code>orderBy<\/code> no est\u00e9 presente:<\/p>\n<pre><code class=\"language-sql\">select * from [users] order by (SELECT 0) offset 10 rows fetch next 10 rows only<\/code><\/pre>\n<p>Esta actualizaci\u00f3n <a href=\"https:\/\/gist.github.com\/dunhamjared\/cb40bbf294ed6f8e48bd60010a31b4f3\" target=\"_blank\" rel=\"noopener noreferrer\">mejora la velocidad en un 33%<\/a> y requiere menos pasos de ejecuci\u00f3n.<\/p>\n<h4>15. Soporte de PHPUnit 10<\/h4>\n<p>Laravel 10 soporta PHPUnit 10. Es un framework de pruebas unitarias para PHP y la versi\u00f3n 10 fue <a href=\"https:\/\/phpunit.de\/announcements\/phpunit-10.html\" target=\"_blank\" rel=\"noopener noreferrer\">lanzada el 3 de febrero de 2023<\/a>. Laravel 10 seguir\u00e1 teniendo soporte para PHPUnit 9 y 8.<\/p>\n<h4>16. Mejoras de Seguridad para la Clase <code>Timebox<\/code><\/h4>\n<p>Laravel 10 incluye mejoras de seguridad para la clase <code>Timebox<\/code>, cuyo objetivo es proteger la aplicaci\u00f3n contra <a href=\"https:\/\/tom.vg\/papers\/timeless-timing-attack_usenix2020.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">ataques de temporizaci\u00f3n<\/a>. La Clase <code>Timebox<\/code> se implementa dentro del m\u00e9todo <code>hasValidCredentials<\/code>.<\/p>\n<p>La clase <code>Timebox<\/code> tiene ahora soporte para manejar las excepciones lanzadas durante la ejecuci\u00f3n de una llamada de retorno de Timebox.<\/p>\n<h4>17. <code>dispatch()<\/code> El Comportamiento de los M\u00e9todos es el Mismo en Laravel 10<\/h4>\n<p>El m\u00e9todo <code>dispatch()<\/code> dentro del rasgo <code>DispatchesJobs<\/code> ahora comprueba los trabajos \u00fanicos igual que la funci\u00f3n de ayuda global <code>dispatch()<\/code>. Esto hace que los m\u00e9todos <code>dispatch()<\/code> adopten las mismas funcionalidades en todo Laravel 10.<\/p>\n<h4>18. Laravel Pennant<\/h4>\n<p>Si alguna vez has trabajado en una aplicaci\u00f3n web que se actualiza constantemente con nuevas caracter\u00edsticas, entender\u00e1s lo vitales que son las banderas de caracter\u00edsticas. Sin embargo, la preservaci\u00f3n de las banderas de caracter\u00edsticas necesitar\u00eda una cantidad significativa de trabajo para hacerlo bien, pero no te preocupes, Laravel te lo permite con el nuevo paquete Laravel Pennant.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/10.x\/pennant\">Laravel Pennant<\/a> proporciona una soluci\u00f3n f\u00e1cil de usar para mantener las banderas de caracter\u00edsticas. Incluso incluye un controlador de matrices en memoria y una base de datos.<\/p>\n<p>Puedes definir f\u00e1cilmente una nueva caracter\u00edstica:<\/p>\n<pre><code class=\"language-php\">use LaravelPennantFeature;\nuse IlluminateSupportLottery;\nFeature::define('new-color-button', function () {\nreturn Lottery::odds(1, 10);\n});<\/code><\/pre>\n<p>As\u00ed podr\u00e1s comprobar si el usuario tiene acceso a esta funci\u00f3n o no:<\/p>\n<pre><code class=\"language-php\">use LaravelPennantFeature;\nif (Feature::active('new-color-button')) {\n  \/\/ ...\n}<\/code><\/pre>\n<p>Incluso tiene un aspecto m\u00e1s bonito en Laravel Blade:<\/p>\n<pre><code class=\"language-php\">@feature('new-color-button')\n\/\/ Kinsta Rules!!\n@endfeature<\/code><\/pre>\n<h4>19. Interacci\u00f3n de Procesos Laravel<\/h4>\n<p>La nueva Interacci\u00f3n de Procesos de Laravel 10 hace que probar y ejecutar procesos CLI sea pan comido. Ofrece una API sencilla para aliviar la carga de las pruebas. Tomemos el ejemplo del <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45314\" target=\"_blank\" rel=\"noopener noreferrer\">original PR<\/a> de la funci\u00f3n por Taylor:<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesProcess;\n$result = Process::run('ls -la');\n$result-&gt;successful();\n$result-&gt;failed();\n$result-&gt;exitCode();\n$result-&gt;output();\n$result-&gt;errorOutput();\n$result-&gt;throw();\n$result-&gt;throwIf(condition);<\/code><\/pre>\n<p>Probablemente te habr\u00e1s dado cuenta de lo sencillo y limpio que es el c\u00f3digo anterior. Pasando a los procesos de construcci\u00f3n, las cosas s\u00f3lo mejoran:<\/p>\n<pre><code class=\"language-php\">$result = Process::timeout(60)-&gt;path(base_path())-&gt;env([...])-&gt;run('ls -la');\n$result = Process::forever()-&gt;run('ls -la');<\/code><\/pre>\n<p>Ahora, para utilizar esta nueva funci\u00f3n en las pruebas, puedes crear un proceso nuevo y ficticio como \u00e9ste:<\/p>\n<pre><code class=\"language-php\">Process::fake([\n  'ls *' =&gt; Process::result('Hello From Kinsta'),\n]);<\/code><\/pre>\n<p>A continuaci\u00f3n, puedes ejecutar el proceso ficticio y utilizar las nuevas <a href=\"https:\/\/laravel.com\/docs\/10.x\/processes#available-assertions\" target=\"_blank\" rel=\"noopener noreferrer\">aserciones disponibles<\/a>:<\/p>\n<pre><code class=\"language-php\">$result = Process::run('ls -la');\nProcess::assertRan(function ($process, $result) {\n  return $process-&gt;command == 'ls -la';\n});\nProcess::assertRanTimes(function ($process, $result) {\n  return $process-&gt;command == 'ls -la';\n}, times: 1);\nProcess::assertNotRan(function ($process, $result) {\n  return $process-&gt;command == 'cat foo';\n});<\/code><\/pre>\n<h4>20. Pest Scaffolding<\/h4>\n<p>Ahora, las pruebas Pest scaffolding est\u00e1n habilitadas por defecto al crear nuevos proyectos Laravel. Para habilitar esta caracter\u00edstica, utiliza la bandera\u00a0<code>--pest<\/code> al crear una nueva aplicaci\u00f3n con el instalador de Laravel:<\/p>\n<pre><code class=\"language-php\">laravel new example-kinsta-app --pest<\/code><\/pre>\n<h4>21. Funci\u00f3n String Password Helper<\/h4>\n<p>Laravel 10 puede crear una contrase\u00f1a aleatoria y segura con una longitud determinada:<\/p>\n<pre><code class=\"language-php\">$password = Str::password(12);<\/code><\/pre>\n<h3>M\u00e9todos y Paquetes Obsoletos en Laravel 10<\/h3>\n<p>A continuaci\u00f3n veremos los paquetes y m\u00e9todos que han sido eliminados con el lanzamiento de Laravel 10.<\/p>\n<h4>Laravel 10 Dice Adi\u00f3s a PHP 8.0<\/h4>\n<p>El framework Laravel deja de soportar PHP 8.0 en Laravel 10. Por lo tanto, si est\u00e1s planeando actualizar tu aplicaci\u00f3n a Laravel 10, primero debes actualizar la versi\u00f3n de PHP a <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-1\/\">PHP 8.1<\/a> o <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-2\/\">PHP 8.2<\/a>.<\/p>\n<h4>Eliminaci\u00f3n de M\u00e9todos Obsoletos<\/h4>\n<p>La <a href=\"https:\/\/laravel.com\/docs\/10.x\/upgrade\">documentaci\u00f3n de Laravel<\/a> se actualiza con todos los cambios y desaprobaciones importantes. Si vas a migrar un proyecto actual a Laravel 10, cualquier c\u00f3digo que utilice un m\u00e9todo obsoleto debe reescribirse con un nuevo enfoque para conseguir el mismo resultado.<\/p>\n<p>Aqu\u00ed tienes una lista de algunas de las desaprobaciones:<\/p>\n<ul>\n<li>El m\u00e9todo <code>Route::home<\/code> (obsoleto en Laravel 9)<\/li>\n<li>Funciones y m\u00e9todos en torno a <code>dispatchNow<\/code>, obsoleto para animar a los desarrolladores a utilizar <a href=\"https:\/\/laravel.com\/docs\/10.x\/queues#synchronous-dispatching\" target=\"_blank\" rel=\"noopener noreferrer\"><code>dispatchSync<\/code><\/a>el \u00fanico m\u00e9todo compatible para el env\u00edo inmediato<\/li>\n<li>El m\u00e9todo <code>getBaseQuery<\/code>, que tiene un equivalente <code>toBase<\/code><\/li>\n<li>La clase <code>MaintenanceModeException<\/code><\/li>\n<li>El rasgo <code>MocksApplicationServices<\/code><\/li>\n<li>El m\u00e9todo <code>Mail::failures<\/code> del falso correo<\/li>\n<li>La propiedad <code>$dates<\/code> (utiliza <a href=\"https:\/\/laravel.com\/docs\/9.x\/eloquent-mutators#attribute-casting\" target=\"_blank\" rel=\"noopener noreferrer\"><code>$casts<\/code><\/a> en su lugar)<\/li>\n<li>El m\u00e9todo <code>assertTimesSent()<\/code><\/li>\n<li>Soporte para Predis 1 y DBAL 2<\/li>\n<li>Todas las depreciaciones relacionadas en <code>doctrine\/dbal<\/code> desde que Laravel dej\u00f3 de soportar la versi\u00f3n 2<\/li>\n<\/ul>\n<h2>C\u00f3mo Instalar Laravel 10<\/h2>\n<p>El core team de Laravel se asegur\u00f3 de que todos los desarrolladores pudieran acceder f\u00e1cilmente al framework en distintos entornos. Por lo tanto, hay varias formas de empezar a usar Laravel 10 en tu m\u00e1quina, y eres totalmente libre de elegir la que mejor te funcione.<\/p>\n<h3>Instalar Laravel 10 en MacOS<\/h3>\n<p>Puedes empezar f\u00e1cilmente con Laravel 10 en MacOS utilizando <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-docker\/\">Docker<\/a> y <a href=\"https:\/\/laravel.com\/docs\/10.x\/sail\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Sail<\/a>. Puedes ejecutar el siguiente comando de terminal desde el directorio donde quieras instalar la aplicaci\u00f3n, teniendo en cuenta que solo se permiten caracteres alfanum\u00e9ricos, guiones y guiones bajos para el nombre de la app:<\/p>\n<pre><code class=\"language-bash\">curl -s \"https:\/\/laravel.build\/example-kinsta-app\" | bash<\/code><\/pre>\n<p>Una vez completado el proceso de instalaci\u00f3n, dir\u00edgete al directorio del proyecto y utiliza Sail para ejecutar tu nuevo proyecto pulsando el siguiente comando en el terminal:<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Sail utilizar\u00e1 su soluci\u00f3n integrada para ejecutar tu proyecto Laravel utilizando Docker, y una vez terminado, tu aplicaci\u00f3n estar\u00e1 lista en <code>http:\/\/localhost<\/code>.<\/p>\n<h3>Instalar Laravel 10 en Windows 10 y 11<\/h3>\n<p>Puedes utilizar <a href=\"https:\/\/docs.docker.com\/desktop\/\">Docker Desktop<\/a> para instalar r\u00e1pidamente Laravel 10 en Windows. Sin embargo, tanto si utilizas Windows 10 como 11, primero debes habilitar una de las dos opciones siguientes en tu m\u00e1quina:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\" target=\"_blank\" rel=\"noopener noreferrer\">Subsistema Windows para Linux 2 (WSL2)<\/a><\/strong> es una caracter\u00edstica del sistema operativo Windows que te permite ejecutar un sistema de archivos Linux y herramientas de l\u00ednea de comandos Linux directamente en Windows.<\/li>\n<li><strong><a href=\"https:\/\/learn.microsoft.com\/en-us\/virtualization\/hyper-v-on-windows\/quick-start\/enable-hyper-v\" target=\"_blank\" rel=\"noopener noreferrer\">Funci\u00f3n Hyper-V Backend<\/a><\/strong> te permite crear y utilizar una versi\u00f3n de software de un ordenador conocida como m\u00e1quina virtual.<\/li>\n<\/ul>\n<p>En cuanto hayas cumplido todos los <a href=\"https:\/\/docs.docker.com\/desktop\/install\/windows-install\/#install-docker-desktop-on-windows\" target=\"_blank\" rel=\"noopener noreferrer\">requisitos de Docker<\/a>, puedes ejecutar el siguiente comando en tu terminal:<\/p>\n<pre><code class=\"language-bash\">curl -s https:\/\/laravel.build\/example-kinsta-app | bash<\/code><\/pre>\n<p>A continuaci\u00f3n, utiliza Sail para ejecutar tu aplicaci\u00f3n en <code><a href=\"http:\/\/localhost\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost<\/a><\/code> ejecutando el siguiente comando desde el directorio root de tu proyecto Laravel 10 reci\u00e9n instalado:<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Por otro lado, muchos desarrolladores prefieren el SO Linux a otros sistemas operativos, ya que les permite trabajar de forma m\u00e1s eficiente y r\u00e1pida. Con WSL, puedes disfrutar de la seguridad, el rendimiento y la compatibilidad con juegos de <a href=\"https:\/\/ubuntu.com\/tutorials\/install-ubuntu-on-wsl2-on-windows-10#1-overview\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu<\/a>. Ubuntu es una distribuci\u00f3n o versi\u00f3n de Linux muy conocida por su facilidad de uso.<\/p>\n<p>Se recomienda que utilices <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a> e instales la <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-wsl\">extensi\u00f3n WSL<\/a> oficial \u00a0de Microsoft para poder abrir cualquier carpeta del Subsistema de Windows para Linux, y aprovechar todo el conjunto de funciones de vscode. Adem\u00e1s, la extensi\u00f3n <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.vscode-remote-extensionpack\" target=\"_blank\" rel=\"noopener noreferrer\">Remote Development<\/a> es otra opci\u00f3n a la que se hace referencia en la documentaci\u00f3n de Laravel.<\/p>\n<h3>Instalar Laravel 10 con Composer<\/h3>\n<p>Tanto si usas macOS como Windows, Composer puede ayudarte a empezar a trabajar con Laravel 10 en un abrir y cerrar de ojos.<\/p>\n<p>Primero tendr\u00e1s que asegurarte de que tienes PHP \u2264 8.1, node, npm y Composer instalados en tu m\u00e1quina.<\/p>\n<ul>\n<li><strong>Para macOS:<\/strong> Composer se puede instalar usando <a href=\"https:\/\/brew.sh\/\" target=\"_blank\" rel=\"noopener noreferrer\">Homebrew<\/a>.<\/li>\n<li><strong>Para Windows:<\/strong> La \u00faltima versi\u00f3n estable de Composer puede descargarse desde el <a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md#installation-windows\" target=\"_blank\" rel=\"noopener noreferrer\">sitio web oficial de Composer<\/a>.<\/li>\n<\/ul>\n<p>Una vez lo hagas, puedes instalar Laravel Installer globalmente y utilizarlo para instalar tu nueva aplicaci\u00f3n Laravel 10:<\/p>\n<pre><code class=\"language-bash\">composer global require laravel\/installer\nlaravel new example-kinsta-app<\/code><\/pre>\n<p>O bien, puedes crear una nueva aplicaci\u00f3n Laravel 10 directamente utilizando s\u00f3lo Composer:<\/p>\n<pre><code class=\"language-bash\">composer create-project laravel\/laravel example-kinsta-app<\/code><\/pre>\n<h2>C\u00f3mo Instalar Laravel 11<\/h2>\n<p>A\u00fan falta un a\u00f1o para el lanzamiento de Laravel 11. Sin embargo, Laravel 11 ya est\u00e1 disponible para que pruebes sus caracter\u00edsticas. No s\u00f3lo est\u00e1 disponible, sino que tambi\u00e9n incluye <a href=\"https:\/\/github.com\/laravel\/framework\/pulls?q=is%3Apr+is%3Amerged+%5B11.x%5D+in%3Atitle\" target=\"_blank\" rel=\"noopener noreferrer\">algunos PR fusionados<\/a> en GitHub, como la eliminaci\u00f3n de la compatibilidad con PHP 8.1.<\/p>\n<p>La bandera <code>--dev<\/code> en el Instalador de Laravel instala la rama maestra del repositorio <code>laravel\/laravel<\/code>, y ahora que Laravel 10 est\u00e1 disponible, Laravel 11 estar\u00e1 disponible en la rama maestra. Si utilizas Laravel Installer, todo lo que tendr\u00e1s que hacer es ejecutar este comando en tu terminal:<\/p>\n<pre><code class=\"language-php\">laravel new example-kinsta-app --dev<\/code><\/pre>\n<p>O, si prefieres usar <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a>:<\/p>\n<pre><code class=\"language-php\">composer create-project --prefer-dist laravel\/laravel example-kinsta-app dev-master<\/code><\/pre>\n<p>Para entender mejor el comando Composer, aqu\u00ed tienes una explicaci\u00f3n r\u00e1pida:<\/p>\n<ul>\n<li><strong><code>laravel\/laravel<\/code>:<\/strong> El paquete para la instalaci\u00f3n de Laravel<\/li>\n<li><strong><code>example-kinsta-app<\/code>:<\/strong> El nuevo directorio para tu nuevo proyecto (puede cambiarse)<\/li>\n<li><strong><code>dev-master<\/code>:<\/strong> La pr\u00f3xima versi\u00f3n de Laravel (en este caso, Laravel 11)<\/li>\n<\/ul>\n<p>Despu\u00e9s de instalar Laravel 11, puedes confirmar la versi\u00f3n navegando al nuevo directorio <strong>example-kinsta-app<\/strong> y ejecutando este comando de Artisan:<\/p>\n<pre><code class=\"language-php\">$ php artisan --version\nLaravel Framework 11.x-dev<\/code><\/pre>\n<h2>C\u00f3mo Actualizar un Proyecto a Laravel 10<\/h2>\n<p>\u00bfEst\u00e1s tentado a actualizar a Laravel 10? El core team de Laravel trabaja duro en la documentaci\u00f3n para proporcionar una gu\u00eda de actualizaci\u00f3n fluida y sencilla que incluya todos los posibles cambios de \u00faltima hora. No dudes en consultar la <a href=\"https:\/\/laravel.com\/docs\/master\/upgrade#upgrade-10.0\" target=\"_blank\" rel=\"noopener noreferrer\">gu\u00eda oficial de actualizaci\u00f3n a Laravel 10<\/a>.<\/p>\n<p>Tambi\u00e9n deber\u00edas echar un ojo a <a href=\"https:\/\/laravelshift.com\/shifts\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Shift<\/a> ahora que se ha lanzado Laravel 10. Laravel Shift ofrece un enfoque sencillo y automatizado para actualizar tu versi\u00f3n de Laravel.<\/p>\n<h2>C\u00f3mo Desplegar Proyectos Laravel 10<\/h2>\n<p>Desplegar Laravel 10 no es diferente de <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#laravel\">desplegar un proyecto Laravel 9<\/a>.<\/p>\n<p>Estos son los requisitos del servidor:<\/p>\n<ul>\n<li>PHP \u2264 8.1<\/li>\n<li>Extensi\u00f3n PHP ctype<\/li>\n<li>Extensi\u00f3n PHP cURL<\/li>\n<li>Extensi\u00f3n DOM PHP<\/li>\n<li>Extensi\u00f3n PHP Fileinfo<\/li>\n<li>Extensi\u00f3n PHP Mbstring<\/li>\n<li>Extensi\u00f3n PHP OpenSSL<\/li>\n<li>Extensi\u00f3n PHP PCRE<\/li>\n<li>Extensi\u00f3n PHP PDO<\/li>\n<li>Extensi\u00f3n PHP Tokenizer<\/li>\n<li>Extensi\u00f3n PHP XML<\/li>\n<li>Extensi\u00f3n PHP Filter<\/li>\n<li>Extensi\u00f3n PHP Hash<\/li>\n<li>Extensi\u00f3n PHP Session<\/li>\n<\/ul>\n<p>Puedes desplegar y <a href=\"https:\/\/sevalla.com\/application-hosting\/\">alojar tu proyecto Laravel 10<\/a> en Kinsta en cuesti\u00f3n de minutos, ya que Laravel forma parte de una larga lista de <a href=\"https:\/\/docs.sevalla.com\/applications\/reference\/faqs\">frameworks compatibles<\/a> con aplicaciones alojadas.<\/p>\n<h3>Desplegando Laravel 10 en Kinsta: Gu\u00eda Paso a Paso<\/h3>\n<p><a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojar y desplegar tus aplicaciones en Kinsta<\/a> tiene varias ventajas, como no tener que preocuparte de la configuraci\u00f3n del despliegue.<\/p>\n<p>Kinsta proporciona una herramienta f\u00e1cil de usar pero potente para desplegar aplicaciones, conectarse a bases de datos y supervisar el rendimiento en directo. Esta herramienta se conoce como <a href=\"https:\/\/kinsta.com\/es\/mykinsta\/\">MyKinsta<\/a>, y en esta secci\u00f3n, te guiaremos a trav\u00e9s de los pasos para desplegar una aplicaci\u00f3n Laravel 10 utiliz\u00e1ndola.<\/p>\n<h4>1. Prepara Tu Aplicaci\u00f3n<\/h4>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-22.png\" alt=\"Un ejemplo de p\u00e1gina de aplicaci\u00f3n Laravel 10, mostrando \"Laravel Kinsta\" en la parte superior seguido de una cuadr\u00edcula de cuatro cajas de contenido con las etiquetas \"Kinsta\", \"Laracasts\", \"Laravel News\", y \"Vibrand Ecosystem\".\" width=\"1024\" height=\"473\"><figcaption class=\"wp-caption-text\">La p\u00e1gina de inicio de una aplicaci\u00f3n Laravel 10 desplegada en Kinsta.<\/figcaption><\/figure>\n<p>Asumiendo que tienes la aplicaci\u00f3n Laravel 10 en local, necesitamos asegurarnos de que tenga un <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-github\/\">repositorio GitHub disponible<\/a>. Usaremos este repositorio para desplegar la aplicaci\u00f3n m\u00e1s adelante.<\/p>\n<p>Puedes incluir un archivo <strong>.htaccess<\/strong> en el directorio root de tu aplicaci\u00f3n que contenga lo siguiente:<\/p>\n<pre><code class=\"language-bash\">&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Para Laravel, esto redirige todas las peticiones a <strong>public\/index.php<\/strong>. Sin embargo, si es necesario, puedes actualizar este comando mientras a\u00f1ades tu aplicaci\u00f3n (paso <strong>Configurar tus procesos<\/strong>) o despu\u00e9s del despliegue, en la p\u00e1gina <strong>Procesos<\/strong> de la aplicaci\u00f3n. Puedes utilizar:<\/p>\n<ul>\n<li><code>heroku-php-apache2 \/public<\/code><\/li>\n<li><code>php artisan serve --host 0.0.0.0 --port 8080<\/code><\/li>\n<\/ul>\n<h4>2. Iniciar Sesi\u00f3n en MyKinsta<\/h4>\n<figure style=\"width: 999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-23.png\" alt=\"Un formulario de inicio de sesi\u00f3n para MyKinsta, mostrando \"MyKinsta Login\" en la parte superior seguido de los campos \"Email y \"Password\", con un bot\u00f3n morado \"Login\" en la parte inferior.\" width=\"999\" height=\"674\"><figcaption class=\"wp-caption-text\">La p\u00e1gina de inicio de sesi\u00f3n de MyKinsta.<\/figcaption><\/figure>\n<p>Dir\u00edgete a la <a href=\"https:\/\/my.kinsta.com\/login?lang=es\">p\u00e1gina de inicio de sesi\u00f3n de MyKinsta<\/a> e introduce tu direcci\u00f3n de correo electr\u00f3nico y tu contrase\u00f1a. Si a\u00fan no tienes una cuenta, puedes <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/?product_type=app-db\">registrar una nueva<\/a> y obtener 20 $ de descuento en tu primer mes de <a href=\"https:\/\/kinsta.com\/es\/precios\/?plan=visits-business1#application-hosting\">suscripci\u00f3n a cualquier plan de precios<\/a>.<\/p>\n<h4>3. Autorizar Kinsta en GitHub<\/h4>\n<p>Una vez que inicies sesi\u00f3n, ver\u00e1s que el panel de control tiene opciones para <a href=\"https:\/\/kinsta.com\/es\/blog\/plataforma-en-la-nube-para-desarrolladores\/#wp\">crear un sitio WordPress<\/a>, <a href=\"https:\/\/kinsta.com\/es\/blog\/plataforma-en-la-nube-para-desarrolladores\/#app\">crear una aplicaci\u00f3n<\/a> o <a href=\"https:\/\/kinsta.com\/es\/blog\/plataforma-en-la-nube-para-desarrolladores\/#db\">crear una base de datos<\/a>. Pulsaremos sobre el bot\u00f3n <strong>Conectar GitHub<\/strong> para <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">integrarnos con GitHub<\/a>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-24.png\" alt=\"Una parte del panel de MyKinsta, que muestra tres mosaicos rectangulares: \"Sitio WordPress\" con un bot\u00f3n de acci\u00f3n \"Crear un sitio\"; \"Aplicaci\u00f3n\" con un bot\u00f3n de acci\u00f3n \"Conectar GitHub\"; y \"Base de datos\" con un bot\u00f3n de acci\u00f3n \"Crear base de datos\".\" width=\"1024\" height=\"430\"><figcaption class=\"wp-caption-text\">El panel de MyKinsta.<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, pulsa el bot\u00f3n <strong>Continuar con GitHub<\/strong>. Si a\u00fan no has iniciado sesi\u00f3n en GitHub, se te mostrar\u00e1 la opci\u00f3n de hacerlo. A continuaci\u00f3n, puedes autorizar a la aplicaci\u00f3n Kinsta GitHub a acceder a tu cuenta de GitHub seleccionando <strong>Autorizar Kinsta<\/strong>.<\/p>\n<p>Por \u00faltimo, GitHub redirigir\u00e1 tu navegador a MyKinsta para continuar configurando la aplicaci\u00f3n.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-25.png\" alt=\"Una ventana modal que dice \"Integraci\u00f3n con GitHub: Conecta Kinsta a tu espacio de nombres Gitub aqu\u00ed para importar tus repositorios existentes\" con un bot\u00f3n blanco \"Cancelar\" y un bot\u00f3n morado \"Continuar con GitHub\".\" width=\"1024\" height=\"271\"><figcaption class=\"wp-caption-text\">Conectar MyKinsta a GitHub.<\/figcaption><\/figure>\n<p>Una vez conectado a GitHub, se te mostrar\u00e1 la ventana emergente\/modal <strong>A\u00f1adir Aplicaci\u00f3n<\/strong>, que tiene un men\u00fa desplegable para seleccionar un repositorio de GitHub. Haz clic en el campo Repositorio de GitHub y selecciona <strong>Editar permisos de GitHub<\/strong> en el desplegable.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-26.png\" alt=\"El formulario \"A\u00f1adir aplicaci\u00f3n\" en MyKinsta, centrado en la subsecci\u00f3n \"Detalles de la aplicaci\u00f3n\", con el texto \"Seleccionar rama\" seguido de dos campos: \"Repositorio GitHub\" y \"Rama por defecto\".\" width=\"1024\" height=\"430\"><figcaption class=\"wp-caption-text\">A\u00f1adir una aplicaci\u00f3n a MyKinsta.<\/figcaption><\/figure>\n<p>Esto abrir\u00e1 una nueva pesta\u00f1a en tu navegador a la p\u00e1gina web de GitHub, donde podr\u00e1s elegir a qu\u00e9 datos podr\u00e1 acceder Kinsta. En lugar de habilitar el acceso a todos los repositorios, considera elegir s\u00f3lo el\/los que quieras que utilice Kinsta.<\/p>\n<p>Haz clic en <strong>Solo seleccionar repositorios<\/strong> y elige el repositorio que deseas desplegar.<\/p>\n<figure style=\"width: 674px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-27.png\" alt=\"Aparecer\u00e1 el mensaje \"Instalar Kinsta\", mostrando opciones para permitir el acceso a \"Todos los repositorios\" o \"Solo a los repositorios seleccionados\", seguido de un bot\u00f3n verde \"Instalar\".\" width=\"674\" height=\"1024\"><figcaption class=\"wp-caption-text\">Conceder a Kinsta acceso a GitHub.<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, haz clic en <strong>Instalar<\/strong> y \u00a1listo!<\/p>\n<p>Cuando vuelvas a MyKinsta y hagas clic en el campo <strong>Repositorio de GitHub<\/strong>, el repositorio autorizado deber\u00eda ser visible. Adem\u00e1s, puedes marcar la casilla <strong>Despliegue autom\u00e1tico al confirmar<\/strong> para que MyKinsta despliegue autom\u00e1ticamente tu aplicaci\u00f3n en cuanto realices cambios en el repositorio de GitHub.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-28.png\" alt=\"La secci\u00f3n de la aplicaci\u00f3n \"Seleccionar rama\" en MyKinsta, que muestra los dos campos \"Repositorio de GitHub\" y \"Rama predeterminada\" y una casilla marcada con la etiqueta \"Despliegue autom\u00e1tico al confirmar\".\" width=\"1024\" height=\"287\"><figcaption class=\"wp-caption-text\">Seleccionar una rama del repositorio para MyKinsta.<\/figcaption><\/figure>\n<h4>4. A\u00f1adir Detalles B\u00e1sicos de la Aplicaci\u00f3n<\/h4>\n<p>Ahora puedes dar a la aplicaci\u00f3n un nombre que solo se utilizar\u00e1 en el panel de control y seleccionar entre 25 ubicaciones de centros de datos, lo que te permitir\u00e1 colocar tu aplicaci\u00f3n en la ubicaci\u00f3n geogr\u00e1fica m\u00e1s cercana a tus usuarios. Si necesitas ayuda para determinar qu\u00e9 <a href=\"https:\/\/kinsta.com\/es\/docs\/servicio-de-informacion\/ubicaciones-de-los-centros-de-datos\/\">centro de datos<\/a> es el ideal para tu aplicaci\u00f3n, consulta nuestra gu\u00eda para <a href=\"https:\/\/kinsta.com\/es\/docs\/servicio-de-informacion\/ubicaciones-de-los-centros-de-datos\/\">elegir la ubicaci\u00f3n correcta<\/a> del centro de datos.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-29.png\" alt=\"La secci\u00f3n \"Detalles b\u00e1sicos\" del proceso de creaci\u00f3n de la aplicaci\u00f3n MyKinsta, que muestra los campos \"Nombre de la aplicaci\u00f3n\" y \"Ubicaci\u00f3n del centro de datos\". \" width=\"1024\" height=\"423\"><figcaption class=\"wp-caption-text\">A\u00f1adir los detalles b\u00e1sicos de una aplicaci\u00f3n.<\/figcaption><\/figure>\n<h4>5. A\u00f1adir Variables de Entorno<\/h4>\n<p>La siguiente secci\u00f3n es para a\u00f1adir <a href=\"https:\/\/kinsta.com\/es\/blog\/variables-de-entorno\/\">variables de entorno<\/a> y la variable m\u00e1s importante es la <code>APP_KEY<\/code>.<\/p>\n<p>Si a\u00fan no tienes una clave en tu archivo .env, puedes generar una utilizando un <a href=\"https:\/\/generate-random.org\/laravel-key-generator\" target=\"_blank\" rel=\"noopener noreferrer\">generador de claves Laravel online<\/a>. A continuaci\u00f3n, inserta <code>APP_KEY<\/code> en el campo <strong>Clave 1<\/strong> e inserta la clave de la app generada en el campo <strong>Valor 1<\/strong>.<\/p>\n<p>Por \u00faltimo, selecciona <strong>Disponible durante el tiempo de ejecuci\u00f3n<\/strong> y <strong>Disponible durante el proceso de construcci\u00f3n<\/strong>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-30.png\" alt=\"La secci\u00f3n de la aplicaci\u00f3n \"Variables de entorno\" en MyKinsta, que muestra los campos \"Clave 1\" y \"Valor 1\", as\u00ed como las casillas de verificaci\u00f3n \"Disponible durante el tiempo de ejecuci\u00f3n\" y \"Disponible durante el proceso de construcci\u00f3n\".\" width=\"1024\" height=\"408\"><figcaption class=\"wp-caption-text\">A\u00f1adir variables de entorno en MyKinsta.<\/figcaption><\/figure>\n<h4>5. Configurar el Entorno de Construcci\u00f3n<\/h4>\n<p>Lo m\u00e1gico aqu\u00ed es que \u00a1no tienes que configurar nada! Puedes proceder haciendo clic en el bot\u00f3n <strong>Continuar<\/strong>, y voil\u00e0: Has completado la configuraci\u00f3n del entorno de construcci\u00f3n. Sin embargo, si quieres mejorar los recursos de construcci\u00f3n para garantizar una construcci\u00f3n m\u00e1s r\u00e1pida, puedes elegir la opci\u00f3n que prefieras en el campo <strong>Recursos de construcci\u00f3n<\/strong>.<\/p>\n<p>El campo <strong>Ruta de construcci\u00f3n<\/strong> es opcional. Puedes dejarlo vac\u00edo, y MyKinsta utilizar\u00e1 la carpeta root.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-31.png\" alt=\"La secci\u00f3n de la aplicaci\u00f3n \"Entorno de Construcci\u00f3n\" en MyKinsta, con campos y cuadros de selecci\u00f3n para \"Construir recursos\", \"Configurar imagen de contenedor autom\u00e1ticamente\" y \"Usar Dockerfile para configurar imagen de contenedor\".\" width=\"1024\" height=\"742\"><figcaption class=\"wp-caption-text\">Configurar el entorno de compilaci\u00f3n de la aplicaci\u00f3n.<\/figcaption><\/figure>\n<h4>6. Configurar Procesos y Forma de Pago<\/h4>\n<p>En la secci\u00f3n Recursos, rellena cada campo con la siguiente informaci\u00f3n:<\/p>\n<ul>\n<li><strong>Nombre del proceso:<\/strong> El nombre que aparece en la lista de procesos de tu aplicaci\u00f3n.<\/li>\n<li><strong>Tipo de proceso:<\/strong> Elige con cuidado, porque no se puede cambiar una vez establecido. Sin embargo, puedes a\u00f1adir y cambiar procesos adicionales, como un trabajo en segundo plano, en la p\u00e1gina Procesos de tu aplicaci\u00f3n despu\u00e9s del despliegue.<\/li>\n<li><strong>Comando de inicio:<\/strong> El comando \u00abStart\u00bb de tu proceso (no es obligatorio).<\/li>\n<li><strong>Tama\u00f1o del pod:<\/strong> La capacidad del pod que esperas necesitar para tu proceso.<\/li>\n<li><strong>N\u00famero de instancias:<\/strong> El n\u00famero de instancias para tu proceso (m\u00e1ximo 50).<\/li>\n<\/ul>\n<p>Ten en cuenta que puedes hacer clic en <strong>Continuar<\/strong> sin rellenar el campo Comando de <strong>inicio<\/strong>, ya que Kinsta detecta autom\u00e1ticamente el comando necesario durante el primer despliegue.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-32.png\" alt=\"La secci\u00f3n \"A\u00f1adir aplicaci\u00f3n: Configura tu proceso\" en MyKinsta, mostrando los campos \"Nombre del proceso\", \"Tipo de proceso\", \"Comando de inicio\", \"Tama\u00f1o del pod\" y \"Recuento de instancias\".\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">Configurar los procesos de la aplicaci\u00f3n.<\/figcaption><\/figure>\n<p>Para el \u00faltimo paso, revisa los costes de uso mensuales calculados para tu aplicaci\u00f3n, y luego confirma tu m\u00e9todo de pago. Cuando hayas terminado, haz clic en el bot\u00f3n <strong>Confirmar m\u00e9todo de pago<\/strong>.<\/p>\n<figure style=\"width: 902px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-33.png\" alt=\"La pantalla de detalles de pago en MyKinsta, que muestra los \"Costes mensuales de uso\" y el \"M\u00e9todo de pago\", este \u00faltimo con una tarjeta Visa.\" width=\"902\" height=\"744\"><figcaption class=\"wp-caption-text\">Confirma los datos de pago.<\/figcaption><\/figure>\n<p>\u00a1Y ya est\u00e1! Kinsta har\u00e1 todo el trabajo en segundo plano para entregar tu aplicaci\u00f3n.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-34.png\" alt=\"La pesta\u00f1a \"Aplicaciones\" en Mykinsta, que muestra una aplicaci\u00f3n desplegada llamada \"example-kinsta-app\" junto con su fuente, tipo y fecha de la \u00faltima modificaci\u00f3n.\" width=\"1024\" height=\"335\"><figcaption class=\"wp-caption-text\">Cargando el proceso de despliegue de la aplicaci\u00f3n.<\/figcaption><\/figure>\n<p>Entonces tendr\u00e1s acceso a todos los detalles del proceso de despliegue, as\u00ed como a la URL temporal de la aplicaci\u00f3n en producci\u00f3n, que m\u00e1s tarde podr\u00e1s sustituir por tu propio dominio.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-35.png\" alt=\"La secci\u00f3n \" Detalles de despliegue \" en MyKinsta despu\u00e9s de desplegar con \u00e9xito la aplicaci\u00f3n, que muestra la informaci\u00f3n de instalaci\u00f3n de la aplicaci\u00f3n junto con los avisos de verificaci\u00f3n de construcci\u00f3n y despliegue.\" width=\"1024\" height=\"746\"><figcaption class=\"wp-caption-text\">Despliegue con \u00e9xito de la aplicaci\u00f3n Laravel 10 en MyKinsta.<\/figcaption><\/figure>\n<p>Tu aplicaci\u00f3n Laravel 10 ya est\u00e1 en producci\u00f3n en Kinsta, pero \u00bfqu\u00e9 pasa si necesitas hacer un cambio en producci\u00f3n? \u00bfQu\u00e9 pasa si queremos cambiar el atributo <code>href<\/code> de una etiqueta de anclaje?<\/p>\n<p>Como hemos activado la opci\u00f3n <strong>Despliegue autom\u00e1tico al confirmar<\/strong>, MyKinsta detectar\u00e1 cualquier cambio que hagamos en la rama desplegada y actualizar\u00e1 autom\u00e1ticamente la aplicaci\u00f3n en producci\u00f3n en consecuencia.<\/p>\n<h4>7. Conecta Laravel 10 a la Base de Datos MySQL<\/h4>\n<p>Ahora que hemos desplegado nuestra aplicaci\u00f3n Laravel 10, podemos construir sin esfuerzo una base de datos y vincularla a nuestra aplicaci\u00f3n. Todo lo que tienes que hacer es hacer clic en <strong>Aplicaciones<\/strong> en el men\u00fa de navegaci\u00f3n de la izquierda, luego en <strong>A\u00f1adir servicio<\/strong> y seleccionar <strong>Base de Datos<\/strong>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-36.png\" alt=\"La opci\u00f3n \"Crear una base de datos\" en MyKinsta, que muestra campos para proporcionar la informaci\u00f3n b\u00e1sica de la base de datos, seguida de un bot\u00f3n morado \"Crear base de datos\".\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">A\u00f1adir una nueva base de datos en MyKinsta.<\/figcaption><\/figure>\n<p>Despu\u00e9s de rellenar todos los campos, haz clic en <strong>Crear base de datos<\/strong>. Esto establecer\u00e1 una nueva base de datos lista para conexiones internas y externas. En nuestro escenario, necesitamos una conexi\u00f3n interna al proyecto Laravel 10 que hemos desplegado.<\/p>\n<p>Para ello, s\u00f3lo tienes que hacer clic en <strong>A\u00f1adir aplicaci\u00f3n<\/strong> en la secci\u00f3n <strong>Conexiones internas<\/strong> y seleccionar tu aplicaci\u00f3n. Puedes marcar la casilla <strong>A\u00f1adir variables de entorno<\/strong> a la aplicaci\u00f3n y MyKinsta rellenar\u00e1 todas las variables <code>.env<\/code> que necesite tu aplicaci\u00f3n.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-37.png\" alt=\"La opci\u00f3n \"A\u00f1adir conexi\u00f3n interna\" en MyKinsta para conectar una base de datos a una aplicaci\u00f3n, con campos de valor clave seguidos de un bot\u00f3n \"A\u00f1adir conexi\u00f3n\".\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">Conectar una base de datos a una aplicaci\u00f3n Laravel 10.<\/figcaption><\/figure>\n<p>Con esto, tu aplicaci\u00f3n Laravel 10 est\u00e1 desplegada y conectada a una base de datos.<\/p>\n<h2>C\u00f3mo Contribuir a Laravel 10<\/h2>\n<p>Aunque Laravel es mantenido por el core team, es desarrollado activamente por m\u00e1s de <a href=\"https:\/\/github.com\/laravel\/framework\/graphs\/contributors\" target=\"_blank\" rel=\"noopener noreferrer\">3.000 colaboradores voluntarios<\/a>.<\/p>\n<p>\u00bfQuieres ser uno de esos colaboradores y ayudar a dar forma al futuro de Laravel? Si tu respuesta es afirmativa, podr\u00edas ayudar a desarrolladores de todo el mundo a\u00f1adiendo una nueva funci\u00f3n, corrigiendo un error o incluso reescribiendo una parte confusa de la documentaci\u00f3n.<\/p>\n<p>Para contribuir a Laravel 10, esto es lo que tienes que hacer:<\/p>\n<ol>\n<li>Dir\u00edgete al <a href=\"https:\/\/github.com\/laravel\/framework\/pulls?page=2&#038;q=is%3Apr+is%3Amerged+10.x\" target=\"_blank\" rel=\"noopener noreferrer\">repositorio GitHub de Laravel<\/a> y echa un vistazo a los pull requests etiquetados con [10.x] en el t\u00edtulo. Esto te proporcionar\u00e1 una visi\u00f3n clara de todos los pull requests para Laravel 10. Si uno de los PR aborda la contribuci\u00f3n que pretend\u00edas hacer, comprueba si puedes mejorarla.<\/li>\n<li>Si tu contribuci\u00f3n prevista a\u00fan no ha sido abordada por otra persona, entonces puedes crear t\u00fa mismo un PR.<\/li>\n<li>No vale la pena a\u00f1adir todo al c\u00f3digo base del framework. Por lo tanto, esfu\u00e9rzate por implementar \u00fanicamente mejoras que sean f\u00e1ciles de mantener en el futuro y que ayuden a la gran mayor\u00eda de la comunidad Laravel.<\/li>\n<li>Aseg\u00farate de cumplir las <a href=\"https:\/\/laravel.com\/docs\/master\/contributions\">directrices de contribuci\u00f3n de Laravel<\/a> para tener m\u00e1s posibilidades de que tus cambios se fusionen con el framework.<\/li>\n<\/ol>\n<p>Otra raz\u00f3n para amar Laravel 10 es que \u00a1te permite ganar dinero por tus contribuciones con la caza de errores! Lo veremos a continuaci\u00f3n.<\/p>\n<h3>Concurso de Caza de Errores de Laravel 10<\/h3>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-20.png\" alt=\"El logotipo de Laravel 10 seguido de un insecto verde de dibujos animados con rayas grises. \" width=\"1024\" height=\"576\"><figcaption class=\"wp-caption-text\">Concurso de caza de errores de Laravel 10.<\/figcaption><\/figure>\n<p>Laravel 10 ha anunciado un excelente concurso en el que un colaborador al azar tiene la oportunidad de ganar 1.000 $. Se trata del primer concurso de este tipo en la historia de Laravel. Se dise\u00f1\u00f3 para animar a la comunidad a encontrar y parchear errores ocultos en Laravel 10.<\/p>\n<p>Las reglas son sencillas:<\/p>\n<ul>\n<li>Solamente son elegibles los PRs enviados a la rama 10.x del repositorio <code>laravel\/framework<\/code>.<\/li>\n<li>Solo se han tenido en cuenta las \u00abaut\u00e9nticas\u00bb correcciones de errores. No se han tenido en cuenta las nuevas funciones, la refactorizaci\u00f3n ni la correcci\u00f3n de erratas.<\/li>\n<li>Cada correcci\u00f3n de errores debe estar respaldada por una prueba.<\/li>\n<li>Las correcciones de errores aceptadas se han etiquetado en GitHub, y tras la finalizaci\u00f3n del concurso se anunciar\u00e1 un ganador al azar.<\/li>\n<\/ul>\n<p>El concurso finaliz\u00f3 cuando se public\u00f3 la primera versi\u00f3n estable de Laravel 10, el 14 de febrero de 2023.<\/p>\n<h2>Resumen<\/h2>\n<p>Hasta ahora, Laravel 10 parece ser extremadamente prometedor, y estamos emocionados por descubrir todos los avances que trae al mundo PHP.<\/p>\n\n<p>Si buscas m\u00e1s <a href=\"https:\/\/kinsta.com\/es\/blog\/rendimiento-laravel\/\">formas de mejorar el rendimiento de tu aplicaci\u00f3n Laravel<\/a>, puedes plantearte cambiar a un proveedor de alojamiento premium. Las <a href=\"https:\/\/sevalla.com\/application-hosting\/\">soluciones de Alojamiento de Aplicaciones de Kinsta<\/a> se encuentran entre las m\u00e1s r\u00e1pidas, seguras y f\u00e1ciles de usar del sector, y est\u00e1n dise\u00f1adas espec\u00edficamente pensando en los desarrolladores, ya que ofrecen optimizaci\u00f3n de la producci\u00f3n y asistencia experta 24 horas al d\u00eda, 7 d\u00edas a la semana, por parte de nuestros propios desarrolladores expertos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tras m\u00e1s de una d\u00e9cada desde la introducci\u00f3n del popular\u00edsimo framework Laravel, \u00bfte has preguntado alguna vez: \u00ab\u00bfQu\u00e9 m\u00e1s puede ofrecer Laravel a los desarrolladores de &#8230;<\/p>\n","protected":false},"author":266,"featured_media":63113,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1303],"class_list":["post-63112","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas<\/title>\n<meta name=\"description\" content=\"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas\" \/>\n<meta property=\"og:description\" content=\"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-21T08:47:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T13:24:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mostafa Said\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mostafa Said\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\"},\"author\":{\"name\":\"Mostafa Said\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\"},\"headline\":\"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas\",\"datePublished\":\"2023-02-21T08:47:32+00:00\",\"dateModified\":\"2025-01-17T13:24:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\"},\"wordCount\":5827,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\",\"name\":\"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png\",\"datePublished\":\"2023-02-21T08:47:32+00:00\",\"dateModified\":\"2025-01-17T13:24:52+00:00\",\"description\":\"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\",\"name\":\"Mostafa Said\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"caption\":\"Mostafa Said\"},\"description\":\"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/mostafasaid\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas","description":"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/","og_locale":"es_ES","og_type":"article","og_title":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas","og_description":"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.","og_url":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-02-21T08:47:32+00:00","article_modified_time":"2025-01-17T13:24:52+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10.png","type":"image\/png"}],"author":"Mostafa Said","twitter_card":"summary_large_image","twitter_description":"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10.png","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Mostafa Said","Tiempo de lectura":"30 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/"},"author":{"name":"Mostafa Said","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996"},"headline":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas","datePublished":"2023-02-21T08:47:32+00:00","dateModified":"2025-01-17T13:24:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/"},"wordCount":5827,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/laravel-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/","url":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/","name":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png","datePublished":"2023-02-21T08:47:32+00:00","dateModified":"2025-01-17T13:24:52+00:00","description":"En este art\u00edculo, te llevaremos en un viaje a trav\u00e9s de las nuevas caracter\u00edsticas de Laravel 10, correcciones, y m\u00e9todos y paquetes recientemente obsoletos.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/laravel-10\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/02\/laravel-10-1.png","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-10\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"Novedades de Laravel 10: Una Inmersi\u00f3n Profunda en las \u00daltimas Actualizaciones y Caracter\u00edsticas"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996","name":"Mostafa Said","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","caption":"Mostafa Said"},"description":"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.","url":"https:\/\/kinsta.com\/es\/blog\/author\/mostafasaid\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=63112"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63112\/revisions"}],"predecessor-version":[{"id":64206,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63112\/revisions\/64206"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/dk"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/translations\/jp"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63112\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/63113"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=63112"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=63112"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=63112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}