{"id":68845,"date":"2023-08-04T09:24:15","date_gmt":"2023-08-04T07:24:15","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=68845&#038;preview=true&#038;preview_id=68845"},"modified":"2023-08-23T17:39:33","modified_gmt":"2023-08-23T15:39:33","slug":"blog-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/","title":{"rendered":"C\u00f3mo Crear un Blog en Laravel"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\">Laravel<\/a> es un framework de aplicaciones web PHP con una sintaxis expresiva y elegante. Dispone de una amplia biblioteca de paquetes y se encarga de gran parte del trabajo pesado de la programaci\u00f3n, dej\u00e1ndote que te centres en tu creatividad.<\/p>\n<p>Un uso creativo de Laravel es la construcci\u00f3n de un blog personal. Este tutorial describe c\u00f3mo utilizar Laravel para construir y publicar un blog en Kinsta.<\/p>\n<p>Para obtener una vista previa del proyecto, consulta el <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-blog\" target=\"_blank\" rel=\"noopener noreferrer\">c\u00f3digo completo del proyecto<\/a>.<\/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>Requisitos Previos<\/h2>\n<p>Para seguir este tutorial, aseg\u00farate de que tienes lo siguiente:<\/p>\n<ul>\n<li>Un servidor web. Este tutorial utiliza <a href=\"https:\/\/www.apachefriends.org\/download.htmlss.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP<\/a>.<\/li>\n<li>Una cuenta en GitHub, GitLab o Bitbucket para publicar el c\u00f3digo de tu aplicaci\u00f3n.<\/li>\n<li><a href=\"https:\/\/laravel.com\/docs\/7.x\/installation\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel instalado<\/a>.<\/li>\n<li>Una cuenta MyKinsta activa para alojar la aplicaci\u00f3n. <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/?product_type=app-db\">Reg\u00edstrate para una prueba gratuita<\/a> si a\u00fan no tienes una.<\/li>\n<\/ul>\n<p>Aseg\u00farate de que los servicios de los m\u00f3dulos <strong>Apache <\/strong>y <strong>MySQL <\/strong>se est\u00e1n ejecutando en el Panel de Control de XAMPP. Si no es as\u00ed, haz clic en el bot\u00f3n <strong>Iniciar <\/strong>de cada servicio en la columna<strong> Acciones<\/strong>. Tu Panel de Control XAMPP deber\u00eda tener este aspecto:<\/p>\n<figure style=\"width: 1089px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/xampp-control-panel-apache-mysql.png\" alt=\"La pantalla del Panel de Control de XAMPP muestra varios servicios de m\u00f3dulos.\" width=\"1089\" height=\"448\"><figcaption class=\"wp-caption-text\">Panel de Control XAMPP<\/figcaption><\/figure>\n<p>Por defecto, MySQL\/MariaDB se ejecuta en el puerto 3306. Toma nota del puerto si lo cambias.<\/p>\n<p>Si utilizas un servidor web distinto de XAMPP, aseg\u00farate de que ejecutas <a href=\"https:\/\/httpd.apache.org\/download.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">Apache<\/a> u otro software de servidor y de que has instalado el <a href=\"https:\/\/mariadb.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">servidor MariaDB<\/a> en tu m\u00e1quina local.<\/p>\n<h3>Inicio R\u00e1pido con phpMyAdmin<\/h3>\n<ol start=\"1\">\n<li>Con MySQL y Apache en funcionamiento, dir\u00edgete a tu navegador.<\/li>\n<li>Abre phpMyAdmin e introduce <code>http:\/\/localhost\/phpmyadmin\/<\/code>. Deber\u00eda mostrar lo siguiente:<\/li>\n<\/ol>\n<figure style=\"width: 1359px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-apache-mysql.png\" alt=\"phpMyAdmin abierto en el navegador.\" width=\"1359\" height=\"397\"><figcaption class=\"wp-caption-text\">phpMyAdmin abierto en el navegador.<\/figcaption><\/figure>\n<p>phpMyAdmin es una herramienta de gesti\u00f3n de bases de datos para MySQL y MariaDB.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Puedes utilizar cualquier sistema de gesti\u00f3n de bases de datos, pero este tutorial utiliza MariaDB, que tiene una conexi\u00f3n con Laravel similar a MySQL. La configuraci\u00f3n de Laravel es la misma en ambas bases de datos.<\/p>\n<\/aside>\n\n<h2>Crear un Nuevo Proyecto Laravel<\/h2>\n<p>Ahora puedes empezar a crear el blog utilizando Laravel. Para este tutorial, hemos utilizado un ordenador con Windows.<\/p>\n<ol start=\"1\">\n<li>Ve al terminal de tu m\u00e1quina o a la interfaz de l\u00ednea de comandos (CLI).<\/li>\n<li>Crea un proyecto Laravel llamado <strong>blog<\/strong> utilizando el comando <code>laravel new blog<\/code>.<\/li>\n<li>Abre el directorio <strong>blog<\/strong> de tu proyecto con el comando <code>cd blog<\/code>.<\/li>\n<li>A continuaci\u00f3n, abre el directorio en tu editor de c\u00f3digo.<\/li>\n<li>Para comprobar que has construido el proyecto correctamente, ejecuta <code>php artisan serve<\/code> en tu terminal o CMD.<\/li>\n<li>Haz clic en la salida de la direcci\u00f3n local para verla en el navegador. El navegador deber\u00eda mostrar la p\u00e1gina de bienvenida predeterminada de Laravel, que se muestra a continuaci\u00f3n:<\/li>\n<\/ol>\n<figure style=\"width: 1279px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-welcome.png\" alt=\"P\u00e1gina de Bienvenida de Laravel cuando se sirve al navegador\" width=\"1279\" height=\"801\"><figcaption class=\"wp-caption-text\">P\u00e1gina de bienvenida de Laravel<\/figcaption><\/figure>\n<h3>Configura la Base de Datos<\/h3>\n<p>Crea y configura la base de datos volviendo a <strong>phpMyAdmin<\/strong> en tu navegador y creando una base de datos llamada <strong>blog<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Para crear la base de datos, en la pesta\u00f1a <strong>Bases de datos<\/strong>, escribe \u00abblog\u00bb en el campo <strong>Crear base de datos<\/strong>.<\/li>\n<li>A continuaci\u00f3n, haz clic en <strong>Crear<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1042px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-create-database.png\" alt=\"Creaci\u00f3n de base de datos en el panel phpMyAdmin\" width=\"1042\" height=\"312\"><figcaption class=\"wp-caption-text\">Creaci\u00f3n de la base de datos en el panel phpMyAdmin<\/figcaption><\/figure>\n<ol start=\"3\">\n<li>A continuaci\u00f3n, actualiza la conexi\u00f3n de la base de datos a tu archivo <strong>.env<\/strong> en el root de tu proyecto de blog. Cambia los valores <code>DB_DATABASE<\/code> y <code>DB_PASSWORD<\/code> por los que has creado.<\/li>\n<\/ol>\n<p>Los detalles de la conexi\u00f3n deber\u00edan tener este aspecto<\/p>\n<pre><code class=\"language-markdown\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=blog\nDB_USERNAME=your-db-username\nDB_PASSWORD=your-db-password<\/code><\/pre>\n<p>Los dem\u00e1s detalles de conexi\u00f3n a la base de datos siguen siendo los mismos que en el archivo <strong>.env<\/strong>. Si cambias alg\u00fan valor de conexi\u00f3n, como cambiar <code>DB_PORT<\/code> de 3306 a 3307 durante la configuraci\u00f3n, aseg\u00farate de actualizarlo en el archivo .<strong>env<\/strong>.<\/p>\n<h3>Crea la Tabla de Puestos<\/h3>\n<p>A continuaci\u00f3n, crea un modelo de base de datos y migra los cambios.<\/p>\n<ol start=\"1\">\n<li>En tu terminal, ejecuta <code>php artisan make:model Post -mc<\/code> para crear un modelo llamado <strong>Post<\/strong>, una tabla llamada <strong>posts<\/strong>, un archivo de migraci\u00f3n y un controlador.<\/li>\n<\/ol>\n<figure style=\"width: 1154px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/terminal-php-artisan-make-model.png\" alt=\"Crear un modelo, un archivo de migraci\u00f3n y un controlador a trav\u00e9s de la l\u00ednea de comandos.\" width=\"1154\" height=\"140\"><figcaption class=\"wp-caption-text\">Crear un modelo, un archivo de migraci\u00f3n y un controlador a trav\u00e9s de la l\u00ednea de comandos.<\/figcaption><\/figure>\n<ol start=\"2\">\n<li>Comprueba el directorio <strong>base de datos\/migraciones<\/strong> y abre el archivo de migraci\u00f3n que acabas de crear. Tiene el siguiente formato: <code>YYYY_MM_DD_ID_create_posts_table.php<\/code>.<\/li>\n<li>En el m\u00e9todo <code>up()<\/code> del archivo de migraci\u00f3n, crea un esquema con los atributos <code>title<\/code>, <code>description<\/code> y <code>image<\/code>.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function up() {\n  Schema::create('posts', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('title')-&gt;nullable();\n    $table-&gt;text('description')-&gt;nullable();\n    $table-&gt;string('image')-&gt;nullable();\n    $table-&gt;timestamps();\n  });\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>Ahora, ve a tu terminal y migra los cambios utilizando <code>php artisan migrate<\/code>, como se muestra a continuaci\u00f3n:<\/li>\n<\/ol>\n<figure style=\"width: 1200px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/terminal-php-artisan-migrate.png\" alt=\"Migraci\u00f3n de la base de datos Laravel\" width=\"1200\" height=\"224\"><figcaption class=\"wp-caption-text\">Migraci\u00f3n de la base de datos Laravel<\/figcaption><\/figure>\n<ol start=\"5\">\n<li>Ve a <strong>phpMyAdmin<\/strong> en tu navegador, donde ver\u00e1s la tabla <strong>posts <\/strong>:<\/li>\n<\/ol>\n<figure style=\"width: 990px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-posts-table.png\" alt=\"La tabla posts migrada se muestra en phpMyAdmin\" width=\"990\" height=\"315\"><figcaption class=\"wp-caption-text\">La tabla posts migrada se muestra en phpMyAdmin<\/figcaption><\/figure>\n<h3>C\u00f3mo Crear Controladores<\/h3>\n<p>A\u00f1adir vistas y controladores implementa tu l\u00f3gica de negocio para el conjunto de bases de datos. Las vistas son las interfaces de usuario que muestran los objetos de datos del modelo. Los controladores gestionan el flujo de ejecuci\u00f3n de datos entre el modelo y las vistas.<\/p>\n<ol start=\"1\">\n<li>Antes de crear los archivos Blade, ejecuta <code>npm install<\/code>, seguido de <code>npm run dev<\/code> en tu terminal. El primer comando instala los paquetes npm necesarios. El segundo comando inicia un servidor de desarrollo Vite.<\/li>\n<li>Dir\u00edgete al directorio <strong>app\/Http\/Controllers<\/strong>, abre el archivo <strong>PostController.php<\/strong> y crea un m\u00e9todo controlador <code>index<\/code>. El m\u00e9todo controlador muestra un texto sencillo al navegador. Para ello, a\u00f1ade el siguiente c\u00f3digo a la clase <code>PostController<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function index() {\n  $post = \"Laravel Tutorial Series One!\";\n  return view('posts.index', ['post'=&gt;$post]);\n}<\/code><\/pre>\n<p>Este m\u00e9todo pasa <code>$post<\/code> como variable de contexto a la secci\u00f3n <code>views<\/code> de la plantilla index Blade. <code>$post<\/code> contiene el texto a mostrar, que, aqu\u00ed, dice: \u00abLaravel Tutorial Series One!\u00bb M\u00e1s adelante sustituir\u00e1s esto al iterar los posts.<\/p>\n<ol start=\"3\">\n<li>Crea dos nuevos directorios en el directorio<strong> resources\/views<\/strong>: <strong>layouts <\/strong>y <strong>posts<\/strong>.<\/li>\n<li>Dentro del directorio <strong>layouts <\/strong>, crea un archivo <strong>app.blade.php<\/strong>. Los dem\u00e1s archivos Blade heredar\u00e1n de \u00e9l.<\/li>\n<li>Copia este c\u00f3digo en <strong>app.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n\n&lt;head&gt;\n  &lt;meta charset=\"utf-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n  &lt;title&gt;Blog&lt;\/title&gt;\n  &lt;!-- Styles \u2192\n  &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.2.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\"&gt;\n  @vite(['resources\/css\/app.css', 'resources\/js\/app.js'])\n&lt;\/head&gt;\n\n&lt;!-- Navbar \u2192\n&lt;header&gt;\n  &lt;nav class=\"navbar bg-primary\"&gt;\n    &lt;div class=\"container-fluid\"&gt;\n      &lt;a class=\"navbar-brand\" href=\"{{ route('posts.index') }}\"&gt;Mini-Blog&lt;\/a&gt;\n    &lt;\/div&gt;\n  &lt;\/nav&gt;\n&lt;\/header&gt;\n\n<!-- Body -->\n&lt;body&gt;\n  @yield('content')\n&lt;\/body&gt;\n\n<!-- Footer -->\n&lt;footer class=\"footer mt-auto py-3 bg-dark\"&gt;\n  &lt;div class=\"container d-lg-flex justify-content-between\"&gt;\n    &lt;span class=\"text-light\"&gt;Mini-Blog \u00a9 2023&lt;\/span&gt;\n  &lt;\/div&gt;\n&lt;\/footer&gt;\n\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"&gt;&lt;\/script&gt;\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.2.3\/dist\/js\/bootstrap.bundle.min.js\"  integrity=\"sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK\/7HAuoJl+0I4\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Al utilizar este c\u00f3digo HTML, importas Bootstrap versi\u00f3n 5.2.3 y Vite para agrupar los activos JavaScript y CSS. La p\u00e1gina generada tiene una cabecera con una barra de navegaci\u00f3n y un pie de p\u00e1gina con los scripts llamados debajo. En el cuerpo, el contenido din\u00e1mico se renderiza desde otros archivos Blade con la ayuda de <code>@yield('content')<\/code>.<\/p>\n<p>El directorio <strong>posts <\/strong>contiene los archivos Blade para implementar las operaciones de creaci\u00f3n y lectura.<\/p>\n<ol start=\"6\">\n<li>Dentro del directorio <strong>posts<\/strong>, crea un archivo Blade llamado <strong>index.blade.php<\/strong> y a\u00f1ade el siguiente c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"titlebar\"&gt;\n    &lt;h1&gt;Blog list&lt;\/h1&gt;\n  &lt;\/div&gt;\n  &lt;hr&gt;\n  &lt;p&gt;The Blog 1 - {{ $post }}&lt;\/p&gt;\n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>Este c\u00f3digo se extiende desde el archivo <strong>app.blade.php<\/strong> de la p\u00e1gina de dise\u00f1os. Cuando se visualiza en el navegador, muestra el contenido de cada entrada del blog, la barra de navegaci\u00f3n y el pie de p\u00e1gina heredados del archivo <strong>app.blade.php<\/strong> de la carpeta <strong>layouts<\/strong>. Entre las etiquetas section, pasas el contenido del controlador para que se muestre en el navegador cuando ejecutes la aplicaci\u00f3n.<\/p>\n<ol start=\"7\">\n<li>Establece la ruta en el directorio <strong>routes <\/strong>. Establecer la ruta permite la carga autom\u00e1tica mediante el <code>RouteServiceProvider<\/code> en el directorio <strong>App\/Providers<\/strong>. El <code>RouteServiceProvider<\/code> es la clase responsable de cargar los archivos de ruta de la aplicaci\u00f3n.<\/li>\n<li>Dentro del archivo <strong>routes\/web.php<\/strong>, importa <strong>PostController <\/strong>utilizando <code>use AppHttpControllersPostController<\/code>.<\/li>\n<li>A continuaci\u00f3n, establece la ruta a\u00f1adiendo <code>Route::resource('posts', PostController::class);<\/code> al archivo <strong>routes\/web.php<\/strong>.<\/li>\n<li>Con el servidor de desarrollo Vite a\u00fan en marcha, utiliza <code>php artisan serve<\/code> para ejecutar la aplicaci\u00f3n en tu terminal.<\/li>\n<li>Con tu navegador, abre <code>http:\/\/127.0.0.1:8000\/posts<\/code> para ver tu nueva lista de entradas del blog.<\/li>\n<\/ol>\n<p>La p\u00e1gina deber\u00eda tener el siguiente aspecto:<\/p>\n<figure style=\"width: 1280px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-blog-list-preview.png\" alt=\"La aplicaci\u00f3n del blog se muestra en el navegador\" width=\"1280\" height=\"267\"><figcaption class=\"wp-caption-text\">La aplicaci\u00f3n del blog se muestra en el navegador<\/figcaption><\/figure>\n<p>En la siguiente secci\u00f3n, definimos los m\u00e9todos del controlador para mostrar todas las entradas, crear una entrada y almacenar una entrada. A continuaci\u00f3n, a\u00f1ade sus rutas y crea los archivos Blade en las secciones correspondientes.<\/p>\n<h2>Crear la P\u00e1gina de Entradas de Blog<\/h2>\n<p>Crea entradas de blog introduciendo un t\u00edtulo, a\u00f1adiendo una descripci\u00f3n y subiendo una imagen. A continuaci\u00f3n, muestra tus entradas en orden secuencial.<\/p>\n<ol start=\"1\">\n<li>En el directorio <strong>app\/Models<\/strong>, abre el archivo <strong>Post.php<\/strong>.<\/li>\n<li>En la clase <code>Post<\/code>, debajo del bloque de c\u00f3digo <code>use HasFactory;<\/code>, a\u00f1ade <code>protected $fillable = ['title', 'description', 'image'];<\/code>.<\/li>\n<\/ol>\n<p>Este c\u00f3digo protege los atributos de tu modelo de las asignaciones masivas.<\/p>\n<ol start=\"3\">\n<li>En tu archivo <strong>app\/Http\/Controllers\/PostController.php<\/strong>, importa el modelo <code>Post<\/code> utilizando <code>use AppModelsPost;<\/code>.<\/li>\n<li>Sustituye los m\u00e9todos de controlador <code>index<\/code> y <code>create<\/code> creados anteriormente en la clase <code>PostController<\/code> por el c\u00f3digo que aparece a continuaci\u00f3n:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ Show all posts\npublic function index() {\n  $posts = Post::orderBy('created_at', 'desc')-&gt;get();\n  return view('posts.index', ['posts' =&gt; $posts]);\n}\n    \n\/\/ Create post\npublic function create() {\n  return view('posts.create');\n}<\/code><\/pre>\n<p>En el m\u00e9todo <code>index<\/code> que acabas de crear, la aplicaci\u00f3n PHP obtiene todos los mensajes, los ordena cronol\u00f3gicamente y los almacena en una variable <code>posts<\/code>. En la vista de retorno, los posts pasan al archivo <strong>index.blade.php<\/strong> como una variable de contexto en el directorio <strong>views\/posts<\/strong>. El m\u00e9todo <code>create<\/code> devuelve un archivo <strong>create.blade.php<\/strong> y lo coloca en el directorio <strong>views\/posts<\/strong> si un usuario intenta hacer un nuevo post.<\/p>\n<ol start=\"5\">\n<li>Crea un m\u00e9todo controlador <code>store<\/code> utilizando el siguiente c\u00f3digo (para almacenar las entradas del blog en la base de datos). A\u00f1ade este c\u00f3digo a la clase <code>PostController<\/code> debajo de los m\u00e9todos de controlador <code>index<\/code> y <code>create<\/code>.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ Store post\npublic function store(Request $request) {\n  \/\/ validations\n  $request-&gt;validate([\n    'title' =&gt; 'required',\n    'description' =&gt; 'required',\n    'image' =&gt; 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',\n  ]);\n\n  $post = new Post;\n\n  $file_name = time() . '.' . request()-&gt;image-&gt;getClientOriginalExtension();\n  request()-&gt;image-&gt;move(public_path('images'), $file_name);\n\n  $post-&gt;title = $request-&gt;title;\n  $post-&gt;description = $request-&gt;description;\n  $post-&gt;image = $file_name;\n\n  $post-&gt;save();\n  return redirect()-&gt;route('posts.index')-&gt;with('success', 'Post created successfully.');\n}<\/code><\/pre>\n<p>El m\u00e9todo <code>store<\/code> gestiona las peticiones del cliente relativas a los datos de su cuerpo, por lo que toma <code>request<\/code> como argumento. A continuaci\u00f3n, valida los campos utilizados al crear una entrada y crea una instancia <code>post<\/code> a partir del modelo <code>Post<\/code>. A continuaci\u00f3n, los datos de los campos introducidos se asignan a la instancia creada y se guardan. La p\u00e1gina redirige a la vista <code>index<\/code> con un texto que dice: \u201cPost created successfully.\u201d (\u00abPost creado con \u00e9xito\u00bb)<\/p>\n<h3>A\u00f1adir Rutas a Tus Entradas<\/h3>\n<p>Para registrar las rutas en tu archivo <strong>web.php<\/strong>:<\/p>\n<ol start=\"1\">\n<li>En el directorio <strong>routes<\/strong> del directorio ra\u00edz de tu proyecto, abre el archivo <strong>web.php<\/strong>.<\/li>\n<li>Registra las rutas de los m\u00e9todos del controlador sustituyendo el c\u00f3digo existente por esto<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nuse IlluminateSupportFacadesRoute;\nuse AppHttpControllersPostController;\n\nRoute::resource('\/', PostController::class)-&gt;names([\n  'index' =&gt; 'posts.index',\n  'create' =&gt; 'posts.create',\n  'store' =&gt; 'posts.store',\n  'show' =&gt; 'posts.show',\n]);<\/code><\/pre>\n<p>Este controlador utiliza estas rutas para crear, almacenar y mostrar sus objetos de datos.<\/p>\n<h3>Crear Archivos de Vistas<\/h3>\n<p>Para crear las vistas, vuelve a la clase <code>PostController<\/code>:<\/p>\n<ol start=\"1\">\n<li>En el directorio <strong>resources\/views\/posts<\/strong>, crea un archivo Blade llamado <strong>create.blade.php<\/strong> y a\u00f1ade el c\u00f3digo que aparece a continuaci\u00f3n:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;h1&gt;Add Post&lt;\/h1&gt;\n  &lt;section class=\"mt-3\"&gt;\n    &lt;form method=\"post\" action=\"{{ route('posts.store') }}\" enctype=\"multipart\/form-data\"&gt;\n      @csrf\n      <!-- Error message when data is not inputted -->\n      @if ($errors-&gt;any())\n        &lt;div class=\"alert alert-danger\"&gt;\n          &lt;ul&gt;\n            @foreach ($errors-&gt;all() as $error)\n              &lt;li&gt;{{ $error }}&lt;\/li&gt;\n            @endforeach\n          &lt;\/ul&gt;\n        &lt;\/div&gt;\n      @endif\n      &lt;div class=\"card p-3\"&gt;\n        &lt;label for=\"floatingInput\"&gt;Title&lt;\/label&gt;\n        &lt;input class=\"form-control\" type=\"text\" name=\"title\"&gt;\n        &lt;label for=\"floatingTextArea\"&gt;Description&lt;\/label&gt;\n        &lt;textarea class=\"form-control\" name=\"description\" id=\"floatingTextarea\" cols=\"30\" rows=\"10\"&gt;&lt;\/textarea&gt;\n        &lt;label for=\"formFile\" class=\"form-label\"&gt;Add Image&lt;\/label&gt;\n        &lt;img src=\"\" alt=\"\" class=\"img-blog\"&gt;\n        &lt;input class=\"form-control\" type=\"file\" name=\"image\"&gt;\n      &lt;\/div&gt;\n      &lt;button class=\"btn btn-secondary m-3\"&gt;Save&lt;\/button&gt;\n    &lt;\/form&gt;\n  &lt;\/section&gt;\n    \n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>En este c\u00f3digo, <strong>create.blade.php<\/strong> hereda el contenido de <strong>app.blade.php<\/strong> en el directorio <strong>layouts<\/strong> utilizando <code>@extends('layouts.app')<\/code>. Estos contenidos incluyen una cabecera, una barra de navegaci\u00f3n y un pie de p\u00e1gina. Despu\u00e9s de a\u00f1adir el texto <code>Add Post<\/code> dentro de la etiqueta <code>h1<\/code>, has creado un formulario con el m\u00e9todo <code>post<\/code> que contiene la acci\u00f3n <code>{{route('posts.store')}}<\/code>.<\/p>\n<p>El c\u00f3digo <code>enctype=\"multipart\/form-data\"<\/code> permite subir im\u00e1genes, y <code>csrf<\/code> protege tu formulario de ataques cross-site. A continuaci\u00f3n, los mensajes de error muestran entradas de campo no v\u00e1lidas y utilizan<code>field attributes<\/code> para crear etiquetas y entradas para el formulario.<\/p>\n<ol start=\"2\">\n<li>Ahora, sustituye el c\u00f3digo del archivo <strong>index.blade.php<\/strong> por el c\u00f3digo siguiente para mostrar todas las entradas del blog:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"titlebar\"&gt;\n    &lt;a class=\"btn btn-secondary float-end mt-3\" href=\"{{ route('posts.create') }}\" role=\"button\"&gt;Add Post&lt;\/a&gt;\n    &lt;h1&gt;Mini post list&lt;\/h1&gt;\n  &lt;\/div&gt;\n    \n  &lt;hr&gt;\n  <!-- Message if a post is posted successfully -->\n  @if ($message = Session::get('success'))\n  &lt;div class=\"alert alert-success\"&gt;\n    &lt;p&gt;{{ $message }}&lt;\/p&gt;\n  &lt;\/div&gt;\n  @endif\n         @if (count($posts) &gt; 0)\n    @foreach ($posts as $post)\n      &lt;div class=\"row\"&gt;\n        &lt;div class=\"col-12\"&gt;\n          &lt;div class=\"row\"&gt;\n            &lt;div class=\"col-2\"&gt;\n              &lt;img class=\"img-fluid\" style=\"max-width:50%;\" src=\"{{ asset('images\/'.$post-&gt;image)}}\" alt=\"\"&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"col-10\"&gt;\n              &lt;h4&gt;{{$post-&gt;title}}&lt;\/h4&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n          &lt;p&gt;{{$post-&gt;description}}&lt;\/p&gt;\n          &lt;hr&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    @endforeach\n  @else\n    &lt;p&gt;No Posts found&lt;\/p&gt;\n  @endif\n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>Este c\u00f3digo a\u00f1ade un bot\u00f3n <strong>A\u00f1adir Post<\/strong>. Cuando se pulsa, crea una entrada y pasa los datos al cuerpo de la p\u00e1gina. La condici\u00f3n <code>if<\/code> comprueba si hay datos en la base de datos. Si hay datos, pasa. Si no, muestra \u00abNo se han encontrado entradas\u00bb<\/p>\n<h3>Estructura Tus P\u00e1ginas<\/h3>\n<p>Ahora puedes ejecutar tu aplicaci\u00f3n utilizando <code>php artisan serve<\/code> para crear y mostrar entradas de blog. Abre <code>&lt;a href=\"http:\/\/127.0.0.1:8000\"&gt;http:\/\/127.0.0.1:8000&lt;\/a &gt;<\/code>, y la p\u00e1gina deber\u00eda tener este aspecto:<\/p>\n<figure style=\"width: 1343px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/list-preview-no-posts.png\" alt=\"La aplicaci\u00f3n de blog aparece en el navegador\" width=\"1343\" height=\"350\"><figcaption class=\"wp-caption-text\">La aplicaci\u00f3n de blog aparece en el navegador<\/figcaption><\/figure>\n<p>Si a\u00f1ades una entrada, aparecer\u00e1 as\u00ed:<\/p>\n<figure style=\"width: 1359px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/preview-post.png\" alt=\"La aplicaci\u00f3n de blog muestra una entrada en el navegador\" width=\"1359\" height=\"641\"><figcaption class=\"wp-caption-text\">La aplicaci\u00f3n de blog muestra una entrada en el navegador<\/figcaption><\/figure>\n<h2>Despliega Tu Blog Laravel en Kinsta<\/h2>\n<p>Para desplegar y probar tu aplicaci\u00f3n Laravel utilizando el <a href=\"https:\/\/sevalla.com\/application-hosting\/\">servicio de Alojamiento de Aplicaciones de Kinsta<\/a>:<\/p>\n<ol start=\"1\">\n<li>Crea un archivo <strong>.htaccess<\/strong>.<\/li>\n<li>Env\u00eda el c\u00f3digo a un repositorio.<\/li>\n<li>Crea una base de datos.<\/li>\n<li>Crea un proyecto en MyKinsta.<\/li>\n<li>Construye y despliega tu blog.<\/li>\n<\/ol>\n<h3>Crea un archivo .htaccess<\/h3>\n<p>En la carpeta ra\u00edz del proyecto, crea un archivo llamado <strong>.htaccess<\/strong>, y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-apacheconf\">&lt;IfModule mod_rewrite.c&gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Este c\u00f3digo redirige las peticiones de tu aplicaci\u00f3n a <strong>public\/index.php<\/strong> en el despliegue.<\/p>\n<h3>Env\u00eda tu C\u00f3digo a un Repositorio<\/h3>\n<p>Crea un repositorio para tu proyecto y publica el c\u00f3digo. Puedes utilizar GitHub, GitLab o Bitbucket para alojar tu c\u00f3digo y desplegarlo en <a href=\"https:\/\/my.kinsta.com\/login?lang=es\">MyKinsta<\/a>.<\/p>\n<h3>Configura la Base de Datos en tu Panel de MyKinsta<\/h3>\n<p>Para crear una base de datos en MyKinsta:<\/p>\n<ol start=\"1\">\n<li>Haz clic en el bot\u00f3n <strong>A\u00f1adir Servicio<\/strong> y selecciona <strong>Base de Datos<\/strong>.<\/li>\n<li>Introduce los detalles de tu base de datos como se muestra a continuaci\u00f3n. Ten en cuenta que para que tu despliegue tenga \u00e9xito, debes dejar el <strong>nombre de usuario de la Base de Datos<\/strong> como valor por defecto.<\/li>\n<\/ol>\n<figure style=\"width: 1136px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-create-database.png\" alt=\"Crear una base de datos en MyKinsta\" width=\"1136\" height=\"739\"><figcaption class=\"wp-caption-text\">Crear una base de datos en MyKinsta<\/figcaption><\/figure>\n<p>Los detalles incluyen el <strong>Nombre de la base de datos, Nombre para mostrar, Tipo de base de datos, Versi\u00f3n, Nombre de usuario de la base de datos, Ubicaci\u00f3n del centro de datos<\/strong> y <strong>Tama\u00f1o<\/strong>. Esta demostraci\u00f3n utiliza MariaDB para la base de datos, y el <strong>Tama\u00f1o<\/strong> es <strong>Db3 (1CPU \/ 4GB RAM \/ 10GB Espacio en Disco 65 USD \/ mes)<\/strong>. Puedes elegir el tipo y tama\u00f1o de base de datos que se adapte a tus necesidades espec\u00edficas.<\/p>\n<ol start=\"3\">\n<li>Haz clic en <strong>Continuar<\/strong>.<\/li>\n<li>Confirma el coste mensual y la forma de pago y, a continuaci\u00f3n, haz clic en <strong>Crear base de datos<\/strong>.<\/li>\n<\/ol>\n<h3>Configurar el Proyecto en MyKinsta<\/h3>\n<p>Para desplegar tu aplicaci\u00f3n en MyKinsta:<\/p>\n<ol start=\"1\">\n<li>Haz clic en el <strong>Panel de control<\/strong>.<\/li>\n<li>Haz clic en <strong>A\u00f1adir Servicio<\/strong> y selecciona <strong>Aplicaci\u00f3n<\/strong>, como se muestra a continuaci\u00f3n:<\/li>\n<\/ol>\n<figure style=\"width: 1399px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-create-app.png\" alt=\"Panel de MyKinsta al a\u00f1adir un servicio de aplicaci\u00f3n\" width=\"1399\" height=\"493\"><figcaption class=\"wp-caption-text\">Panel de MyKinsta al a\u00f1adir un servicio de aplicaci\u00f3n<\/figcaption><\/figure>\n<p>MyKinsta te redirige a la p\u00e1gina <strong>A\u00f1adir aplicaci\u00f3n<\/strong>.<\/p>\n<ol start=\"1\">\n<li>En la secci\u00f3n de tarjetas <strong>Seleccionar rama<\/strong>, selecciona tu repositorio de GitHub y, a continuaci\u00f3n, marca la casilla <strong>A\u00f1adir despliegue en commit<\/strong>.<\/li>\n<li>En los <strong>Detalles b\u00e1sicos<\/strong>, introduce el nombre de la aplicaci\u00f3n y selecciona la ubicaci\u00f3n del centro de datos para tu aplicaci\u00f3n.<\/li>\n<li>Como Laravel necesita una clave de aplicaci\u00f3n durante el despliegue, en la tarjeta <strong>Variables de entorno<\/strong>, a\u00f1ade una <strong>APP_KEY<\/strong> como Clave 1. Puedes utilizar la <strong>APP_KEY<\/strong> definida en tu archivo <strong>.env<\/strong> local o utilizar un <a href=\"https:\/\/generate-random.org\/laravel-key-generator?count=1\">generador de Claves Laravel online<\/a> para obtener una.<\/li>\n<li>Haz clic en <strong>Continuar<\/strong>.<\/li>\n<li>Selecciona los recursos de construcci\u00f3n (CPU y RAM) para tu aplicaci\u00f3n. Esta demostraci\u00f3n utiliza la <strong>m\u00e1quina de construcci\u00f3n est\u00e1ndar (1CPU \/ 4 GB RAM<\/strong>).<\/li>\n<li>Deja seleccionado el bot\u00f3n de opci\u00f3n <strong>Configurar autom\u00e1ticamente la imagen contenedora.<\/strong><\/li>\n<li>Haz clic en <strong>Continuar<\/strong>.<\/li>\n<li>En la p\u00e1gina <strong>Configura tus procesos<\/strong>, puedes cambiar el tama\u00f1o del pod y la instancia de tu aplicaci\u00f3n seleccionando estas casillas. Esta demostraci\u00f3n utiliza los valores por defecto.<\/li>\n<li>Haz clic en <strong>Continuar<\/strong>.<\/li>\n<li>Por \u00faltimo, haz clic en el bot\u00f3n <strong>Confirmar m\u00e9todo de pago<\/strong> para iniciar el despliegue de tu aplicaci\u00f3n. Al hacer clic en este bot\u00f3n, tambi\u00e9n acceder\u00e1s a la p\u00e1gina de <strong>detalles de despliegue<\/strong> para ver el progreso de tu despliegue.<\/li>\n<\/ol>\n<h3>Construye y Despliega tu Aplicaci\u00f3n<\/h3>\n<p>Con la base de datos y la aplicaci\u00f3n alojadas, conecta la base de datos a tu aplicaci\u00f3n y luego realiza el despliegue.<\/p>\n<p>Para conectar la base de datos, utiliza las conexiones externas de tu base de datos alojada. En la pesta\u00f1a <strong>Informaci\u00f3n <\/strong>de tu base de datos alojada, ver\u00e1s <strong>Conexiones externas<\/strong>, como se muestra a continuaci\u00f3n:<\/p>\n<figure style=\"width: 1120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-db-external-connections.png\" alt=\"Conexiones externas de tu base de datos alojada\" width=\"1120\" height=\"498\"><figcaption class=\"wp-caption-text\">Conexiones externas de tu base de datos alojada<\/figcaption><\/figure>\n<ol start=\"1\">\n<li>En la p\u00e1gina <strong>Configuraci\u00f3n <\/strong>de la app desplegada, ve a la tarjeta <strong>Variable de entorno<\/strong>.<\/li>\n<li>Haz clic en <strong>A\u00f1adir variable de entorno<\/strong> para a\u00f1adir las conexiones externas de tu base de datos alojada con el valor correspondiente. Utiliza las mismas variables que tienes en tu archivo <strong>.env<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1107px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-app-env-variables.png\" alt=\"Las variables de entorno para tu base de datos alojada\" width=\"1107\" height=\"700\"><figcaption class=\"wp-caption-text\">Las variables de entorno para tu base de datos alojada<\/figcaption><\/figure>\n<p>Esta captura de pantalla es \u00fatil si consideras marcar las variables &lt;code&gt;env&lt;\/code&gt; que has editado manualmente para diferenciarlas de las dem\u00e1s.<\/p>\n<p><strong>APP_URL <\/strong>es la URL de tu aplicaci\u00f3n alojada, y <strong>DB_CONNECTION<\/strong> es <code>mysql<\/code>.<\/p>\n<ol start=\"1\">\n<li>Dir\u00edgete a la p\u00e1gina de <strong>Configuraci\u00f3n<\/strong> de tu aplicaci\u00f3n.<\/li>\n<li>En el apartado de <strong>Buildpacks <\/strong>, a\u00f1ade PHP y Node.js como paquetes de construcci\u00f3n. Como se trata de una aplicaci\u00f3n PHP, debes a\u00f1adir el paquete de construcci\u00f3n PHP en \u00faltimo lugar.<\/li>\n<li>Haz clic en <strong>Desplegar ahora<\/strong> para reconstruir tu aplicaci\u00f3n.<\/li>\n<\/ol>\n<p>A continuaci\u00f3n, a\u00f1ade un proceso que migre la base de datos.<\/p>\n<ol start=\"1\">\n<li>Dir\u00edgete a la pesta\u00f1a <strong>Procesos <\/strong>de la p\u00e1gina de tu aplicaci\u00f3n alojada.<\/li>\n<li>Selecciona <strong>Crear proceso<\/strong> en la ficha <strong>Procesos de tiempo de ejecuci\u00f3n<\/strong>.<\/li>\n<li>Introduce <strong>Migraci\u00f3n<\/strong> como nombre, <strong>Worker en segundo plano<\/strong> como tipo y <code>php artisan migrate --force<\/code> como comando de inicio. Puedes dejar el tama\u00f1o del pod y las instancias con los valores por defecto.<\/li>\n<li>Selecciona <strong>Continuar <\/strong>para crear el proceso. Esta acci\u00f3n desencadena una nueva construcci\u00f3n y vuelve a desplegar la aplicaci\u00f3n.<\/li>\n<li>En la pesta\u00f1a <strong>Dominios <\/strong>de tu aplicaci\u00f3n, haz clic en el enlace de tu aplicaci\u00f3n. Puedes ver que ahora est\u00e1 en funcionamiento.<\/li>\n<li>Observa que la aplicaci\u00f3n de blog desplegada en MyKinsta no muestra ninguna entrada. Crea una nueva entrada introduciendo su t\u00edtulo, a\u00f1adiendo una descripci\u00f3n y eligiendo una imagen.<\/li>\n<\/ol>\n<h2>Resumen<\/h2>\n<p>Laravel facilita el desarrollo r\u00e1pido de un blog sencillo. Su r\u00e1pida carga de p\u00e1ginas, su robusta arquitectura de controladores y su competente seguridad facilitan la mejora del rendimiento de una aplicaci\u00f3n. Mientras tanto, MyKinsta te permite publicar y enviar tus aplicaciones web de forma r\u00e1pida y eficaz. El modelo de precios flexible de MyKinsta se basa en el uso, eliminando los costes ocultos.<\/p>\n<p>Cuando Kinsta aloja tu aplicaci\u00f3n Laravel, se ejecuta en <a href=\"https:\/\/kinsta.com\/es\/blog\/plataforma-en-la-nube-para-desarrolladores\/\">Google Cloud Platform en su Nivel Premium<\/a>, para que sea lo m\u00e1s r\u00e1pida posible. Kinsta tambi\u00e9n incluye protecci\u00f3n y mitigaci\u00f3n DDoS de nivel empresarial con Cloudflare y cortafuegos avanzados para mantener a raya a los actores maliciosos, y mucho m\u00e1s.<\/p>\n<p>\u00a1Empieza tu <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/?product_type=app-db\">prueba gratuita<\/a>\u00a0de Alojamiento de Aplicaciones ahora mismo para agilizar el desarrollo y alojamiento de tus aplicaciones web!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel es un framework de aplicaciones web PHP con una sintaxis expresiva y elegante. Dispone de una amplia biblioteca de paquetes y se encarga de gran &#8230;<\/p>\n","protected":false},"author":290,"featured_media":68846,"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-68845","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>C\u00f3mo Crear un Blog en Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.\" \/>\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\/blog-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Crear un Blog en Laravel\" \/>\n<meta property=\"og:description\" content=\"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\" \/>\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-08-04T07:24:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-23T15:39:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\" \/>\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=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"C\u00f3mo Crear un Blog en Laravel\",\"datePublished\":\"2023-08-04T07:24:15+00:00\",\"dateModified\":\"2023-08-23T15:39:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\"},\"wordCount\":3106,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\",\"name\":\"C\u00f3mo Crear un Blog en Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\",\"datePublished\":\"2023-08-04T07:24:15+00:00\",\"dateModified\":\"2023-08-23T15:39:33+00:00\",\"description\":\"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#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\":\"C\u00f3mo Crear un Blog en Laravel\"}]},{\"@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\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Crear un Blog en Laravel - Kinsta\u00ae","description":"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.","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\/blog-laravel\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Crear un Blog en Laravel","og_description":"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.","og_url":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-08-04T07:24:15+00:00","article_modified_time":"2023-08-23T15:39:33+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Marcia Ramos","Tiempo de lectura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"C\u00f3mo Crear un Blog en Laravel","datePublished":"2023-08-04T07:24:15+00:00","dateModified":"2023-08-23T15:39:33+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/"},"wordCount":3106,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/","url":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/","name":"C\u00f3mo Crear un Blog en Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","datePublished":"2023-08-04T07:24:15+00:00","dateModified":"2023-08-23T15:39:33+00:00","description":"Esta gu\u00eda paso a paso te lleva a trav\u00e9s de todo el proceso de construcci\u00f3n de un blog utilizando Laravel y ponerlo online con Kinsta.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/blog-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-blog.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#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":"C\u00f3mo Crear un Blog en Laravel"}]},{"@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\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/68845","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\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=68845"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/68845\/revisions"}],"predecessor-version":[{"id":68943,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/68845\/revisions\/68943"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/68845\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/68846"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=68845"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=68845"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=68845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}