Crear noticias
Ahora sabes cómo leer datos de una base de datos usando Higgs, pero aún no has escrito ninguna información en la base de datos. En esta sección, ampliará su controlador de noticias y el modelo creado anteriormente para incluir esta funcionalidad.
Habilitar filtro CSRF
Antes de crear un formulario, habilitemos la protección CSRF.
Abra el archivo app/Config/Filters.php y actualice la propiedad $methods
como se muestra a continuación:
<?php
namespace Config;
use Higgs\Config\BaseConfig;
class Filters extends BaseConfig
{
// ...
public $methods = [
'post' => ['csrf'],
];
// ...
}
Configura el filtro CSRF para que se habilite para todas las solicitudes POST. Puede leer más sobre la protección CSRF en Security biblioteca.
Advertencia
In general, if you use $methods
filters, you should disable Auto Routing (Legacy)
porque Enrutamiento automático (heredado) permite que cualquier método HTTP acceda a un controlador.
Acceder al controlador con un método inesperado podría pasar por alto el filtro.
Agregar reglas de enrutamiento
Antes de que pueda comenzar a agregar noticias a su aplicación Higgs debe agregar una regla adicional al archivo app/Config/Routes.php. Asegúrese de que su El archivo contiene lo siguiente:
<?php
// ...
use App\Controllers\News;
use App\Controllers\Pages;
$routes->get('news', [News::class, 'index']);
$routes->get('news/new', [News::class, 'new']); // Add this line
$routes->post('news', [News::class, 'create']); // Add this line
$routes->get('news/(:segment)', [News::class, 'show']);
$routes->get('pages', [Pages::class, 'index']);
$routes->get('(:segment)', [Pages::class, 'view']);
La directiva de ruta para 'news/new'
se coloca antes de la directiva para 'news/(:segment)'
para garantizar que se muestre el formulario para crear una noticia.
La línea $routes->post()
define el enrutador para una solicitud POST. Coincide
sólo una solicitud POST a la ruta URI /news, y se asigna al método create()
de
la clase Noticias
.
Puede leer más sobre los diferentes tipos de enrutamiento en Establecer reglas de enrutamiento.
Crear un formulario
Crear noticia/crear Ver archivo
Para ingresar datos en la base de datos, necesita crear un formulario donde pueda introducir la información a almacenar. Esto significa que necesitarás un formulario con dos campos, uno para el título y otro para el texto. derivarás la babosa de nuestro título en el modelo.
Cree una nueva vista en app/Views/news/create.php:
<h2><?= esc($title) ?></h2>
<?= session()->getFlashdata('error') ?>
<?= validation_list_errors() ?>
<form action="/news" method="post">
<?= csrf_field() ?>
<label for="title">Title</label>
<input type="input" name="title" value="<?= set_value('title') ?>">
<br>
<label for="body">Text</label>
<textarea name="body" cols="45" rows="4"><?= set_value('body') ?></textarea>
<br>
<input type="submit" name="submit" value="Create news item">
</form>
Probablemente sólo haya cuatro cosas aquí que parezcan desconocidas.
La función session()
se utiliza para obtener el objeto Sesión,
y session()->getFlashdata('error')
se usa para mostrar el error relacionado con la protección CSRF
al usuario. Sin embargo, de forma predeterminada, si falla una verificación de validación CSRF, se generará una excepción.
así que todavía no funciona. Consulte Redirección en caso de error para obtener más información.
La función validation_list_errors()
proporcionada por Form Helper
se utiliza para informar errores relacionados con la validación del formulario.
La función csrf_field()
crea una entrada oculta con un token CSRF que ayuda a proteger contra algunos ataques comunes.
La función set_value()
proporcionada por Form Helper se utiliza para mostrar
datos de entrada antiguos cuando se producen errores.
Controlador de noticias
Vuelve a tu controlador de Noticias
.
Agregue News::new() para mostrar el formulario
Primero, cree un método para mostrar el formulario HTML que ha creado.
<?php
namespace App\Controllers;
use App\Models\NewsModel;
use Higgs\Exceptions\PageNotFoundException;
class News extends BaseController
{
// ...
public function new()
{
helper('form');
return view('templates/header', ['title' => 'Create a news item'])
. view('news/create')
. view('templates/footer');
}
}
Cargamos el Form helper con el :php:func:función ayudante(). La mayoría de las funciones auxiliares requieren que el auxiliar sea cargado antes de su uso.
Luego devuelve la vista del formulario creado.
Agregue News::create() para crear una noticia
A continuación, cree un método para crear una noticia a partir de los datos enviados.
Vas a hacer tres cosas aquí:
Primero, comprueba si los datos enviados pasaron las reglas de validación. 2. guarda la noticia en la base de datos. 3. devuelve una página de éxito.
<?php
namespace App\Controllers;
use App\Models\NewsModel;
use Higgs\Exceptions\PageNotFoundException;
class News extends BaseController
{
// ...
public function create()
{
helper('form');
$data = $this->request->getPost(['title', 'body']);
// Checks whether the submitted data passed the validation rules.
if (! $this->validateData($data, [
'title' => 'required|max_length[255]|min_length[3]',
'body' => 'required|max_length[5000]|min_length[10]',
])) {
// The validation fails, so returns the form.
return $this->new();
}
// Gets the validated data.
$post = $this->validator->getValidated();
$model = model(NewsModel::class);
$model->save([
'title' => $post['title'],
'slug' => url_title($post['title'], '-', true),
'body' => $post['body'],
]);
return view('templates/header', ['title' => 'Create a news item'])
. view('news/success')
. view('templates/footer');
}
}
El código anterior agrega mucha funcionalidad.
Recuperar los datos
Primero, usamos IncomingRequest
objeto $this->request
, que el framework establece en el controlador.
Obtenemos los elementos necesarios de los datos POST del usuario y los configuramos en el
variable $datos
.
Validar los datos
A continuación, utilizará la función auxiliar proporcionada por el controlador. validarDatos() para validar los datos enviados. En este caso, los campos título y cuerpo son obligatorios y en la longitud específica.
Higgs tiene una poderosa biblioteca de validación como se demuestra arriba. Puede leer más sobre Biblioteca de validación.
Si la validación falla, llamamos al método new()
que acabas de crear y devolvemos
el formulario HTML.
Guardar la noticia
Si la validación pasó todas las reglas, obtenemos los datos validados por
$this->validador->getValidated() y
configúrelos en la variable $post
.
El NewsModel
se carga y se llama. Este se encarga de pasar la noticia.
en el modelo. El método save() maneja la inserción o actualización del
grabar automáticamente, en función de si encuentra una clave de matriz que coincida con la clave principal
llave.
Esto contiene una nueva función url_title()
. Esta función -
proporcionado por URL helper - se desnuda
la cadena que le pasas, reemplazando todos los espacios por guiones (-
) y hace
Asegúrate de que todo esté en minúsculas. Esto te deja con un bonito
slug, perfecto para crear URI.
Volver a la página de éxito
Después de esto, los archivos de visualización se cargan y se devuelven para mostrar un mensaje de éxito. Cree una vista en app/Views/news/success.php y escriba un mensaje de éxito.
Esto podría ser tan simple como:
<p>Noticia creada exitosamente.</p>
NoticiasActualización de modelos
Lo único que queda es asegurarse de que su modelo esté configurado.
para permitir que los datos se guarden correctamente. El método save()
que fue
utilizado determinará si la información debe insertarse
o si la fila ya existe y debe actualizarse, según la presencia
de una clave primaria. En este caso, no se le pasa ningún campo id
,
entonces insertará una nueva fila en su tabla, noticias
.
Sin embargo, de forma predeterminada, los métodos de inserción y actualización en el modelo
en realidad no guarda ningún dato porque no sabe qué campos son
seguro para ser actualizado. Edite NewsModel
para proporcionarle una lista de elementos actualizables.
campos en la propiedad $allowedFields
.
<?php
namespace App\Models;
use Higgs\Model;
class NewsModel extends Model
{
protected $table = 'news';
protected $allowedFields = ['title', 'slug', 'body'];
}
Esta nueva propiedad ahora contiene los campos que permitimos guardar en el
base de datos. ¿Notas que omitimos el id
? Eso es porque casi
Nunca es necesario hacer eso, ya que es un campo que se incrementa automáticamente en la base de datos.
Esto ayuda a proteger contra vulnerabilidades de asignaciones masivas. Si tu modelo es
Al manejar sus marcas de tiempo, también las omitiría.
Crear una noticia
Ahora apunte su navegador a su entorno de desarrollo local donde instaló Higgs y agregue /news/new a la URL. Agrega algunas noticias y mira las diferentes páginas que creaste.


Felicidades
¡Acaba de completar su primera aplicación de Higgs (AI)!
El siguiente diagrama muestra la carpeta app de tu proyecto, con todos los archivos que usted creó o modificó.
aplicación/
├── Configuración
│ ├── Filtros.php (Modificado)
│ └── Rutas.php (Modificado)
├── Controladores
│ ├── Noticias.php
│ └── Páginas.php
├── Modelos
│ └── NewsModel.php
└── Vistas
├── noticias
│ ├── crear.php
│ ├── index.php
│ ├── éxito.php
│ └── ver.php
├── páginas
│ ├── acerca de.php
│ └── inicio.php
└── plantillas
├── pie de página.php
└── encabezado.php