CodeIgniter 4: Создание CRUD приложения для начинающих
CodeIgniter 4 запускается с обновленными функциями по сравнению с CodeIgniter 3. Теперь он немного похож на фреймворк Laravel. Вы можете создать схему базы данных, используя миграции в CodeIgniter 4. Это будет работать как контроль версий схемы базы данных. Каждый раз, когда вы будете обновлять схему, вам придется ее переносить. При миграции будут удалены все существующие таблицы и схема, а затем они будут созданы заново. Таким образом, в приложении CodeIgniter 4 довольно просто использовать и управлять. Кроме того, вы можете создать файл модели, миграции и контроллера с помощью командной строки. Эти функции не были доступны в предыдущей версии. Сегодня в этом посте мы создадим приложение CRUD в CodeIgniter 4. Операция CRUD в CodeIgniter 4 будет содержать CREATE, READ, UPDATE и DELETE на основе данных.
В этом уроке по CodeIgniter 4 мы начнем с нуля. Так что новичкам будет полезно схватить и реализовать его. Следовательно, мы начинаем с CRUD в CodeIgniter 4. Итак, перейдем к публикации.
Предпосылки
Для создания этого проекта в CodeIgniter 4 ваша система должна иметь следующие конфигурации.
- PHP >= 7.3
- MySQL (версия > 5)
- Apache/Nginx Server
- VS Code редактор
- Composer
Создаем новое приложение для CRUD в CodeIgniter 4
Для создания приложения CodeIgniter 4 мы будем использовать composer.
Создаем приложение codeigniter 4 с помощью composer
composer create-project codeigniter4/appstarter blog
В приведенной выше команде, composer начнет создание проекта. Начальный репозиторий приложения CodeIgniter 4 содержит скелет приложения с зависимостью от composer'a. Здесь название проекта - blog (блог). Таким образом, он создаст новую папку с именем blog и установит в нее файлы CodeIgniter 4.
После создания проекта мы создадим базу данных в MySQL. Для выполнения операции CRUD в CodeIgniter 4 нам нужно будет подключить приложение к базе данных.
Создаем базу данных для CodeIgniter 4
Для базы данных мы будем использовать командную строку. Вы также можете использовать phpMyAdmin или MySQL Workbench. Это полностью зависит от вас, как вы с этим справитесь.
Создаем базу данных
CREATE DATABASE ci4_blog;
Мы создали базу данных с помощью указанной выше команды. Как видите, в базе данных нет ни одной таблицы. На следующих этапах мы создадим их, используя миграцию.
Теперь откроем созданный проект в редакторе кода.
Настройка базы данных в CodeIgniter 4
Мы уже создали базу данных. Теперь потребуется связать её с нашим приложением. Итак, во-первых, мы откроем проект в редакторе VS Code. Затем, найдите файл env и переименуйте его в .env. Откройте переименованный файл .env. По умолчанию все конфигурации среды комментируются внутри файла .env.
Далее, вам нужно раскомментировать CI_ENVIRONMENT и изменить production на development. Собственно, мы собираемся создать CRUD в CodeIgniter 4, так чтобы он находится в режиме разработки. В режиме разработки вы сможете отлаживать и обнаруживать ошибки в вашем приложении. Но если вы находитесь в режиме продакшн, вы не сможете отображать ошибки в своем приложении.
После этого мы настроим учетные данные базы данных. Итак, в том же файле просто найдите базу данных. Здесь, в конфигурации базы данных по умолчанию, мы настроим учетные данные нашей базы данных. Просто раскомментируйте эти строки и поместите данные, как показано ниже.
Учетные данные базы данных в файле .env
database.default.hostname = localhost
database.default.database = ci4_blog
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi
Вы можете увидеть в приведенном ниже результате, как мы настроили детали базы данных.
Теперь мы готовы перейти к операции CRUD в приложении CodeIgniter 4.
Создаем миграцию в CodeIgniter 4
Как уже было сказано в самом начале статьи, в CodeIgniter 4 мы можем создать файл миграции для таблицы. Этот файл миграции будет содержать схему таблицы.
Перед созданием миграции с помощью Spark вы можете просмотреть справку для получения дополнительных сведений.
php spark --help
Приведенная выше команда покажет вам список доступных команд для использования их в CodeIgniter 4.
Здесь вы увидите make:migration в разделе Generators. Вы также можете просмотреть справку по конкретной команде. Если мы хотим увидеть подробную информацию о make:migration, вы можете использовать следующую команду.
php spark help make:migration
Он перечислит описание, использование и доступные флаги для этой команды
Создаем перенос для таблицы публикаций
Теперь давайте создадим перенос для публикации. Собственно, мы создали приложение для блога, поэтому создадим таблицу постов. Мы определили имя таблицы во множественном числе, поэтому здесь имя таблицы будет posts.
Делаем перенос таблицы постов
php spark make:migration posts --table
Вышеупомянутая команда создаст новый файл внутри app/Database/Migrations. Вот что мы имеем:
Вы можете увидеть результат ниже. Здесь создается миграция таблицы постов. По умолчанию есть две функции:
- up()
- down()
Мы должны определить схему для таблицы постов в функции up(). Когда мы будем переносить таблицу, она сгенерирует схему с помощью команды up. В функции down() мы установим код для удаления этой таблицы. Итак, давайте посмотрим по порядку.
В приведенном ниже фрагменте мы добавили схему для таблицы постов. Вы можете просто вставить туда приведенный ниже код.
timestamp_Post.php
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Posts extends Migration
{
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'auto_increment' => true
],
'title' => [
'type' => 'VARCHAR',
'constraint' => '100'
],
'description' => [
'type' => 'TEXT'
],
'created_at datetime default current_timestamp',
'updated_at datetime default current_timestamp on update current_timestamp'
]);
$this->forge->addKey('id', true);
$this->forge->createTable('posts');
}
public function down()
{
$this->forge->dropTable('posts');
}
}
После добавления схемы в файл миграции потребуется выполнить миграцию.
php spark migrate
Приведенная выше команда перенесет таблицы. Здесь у нас есть только один файл миграции, поэтому он создаст для него таблицу.
После успешной миграции вы можете проверить базу данных. Здесь была создана таблица постов. Вы можете видеть, что схема таблицы постов была сгенерирована.
Теперь мы перейдем к следующему шагу по созданию CRUD в CodeIgniter 4.
Создаём модель в CodeIgniter 4
Для управления и выполнения операции CRUD в CodeIgniter 4 мы будем использовать Model. Модель синхронизируется с базой данных.
Создаём модель Posts
php spark make:model Post
Приведенная выше команда создаст модель с именем Post.php. Кроме того, внутри него будут сгенерированы некоторые коды по умолчанию. Например, имя таблицы, основное поле, разрешенные поля и многое другое.
Post.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class Post extends Model
{
protected $DBGroup = 'default';
protected $table = 'posts';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $insertID = 0;
protected $returnType = 'array';
protected $protectFields = true;
protected $allowedFields = ['title', 'description'];
// Dates
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
}
Мы создали имя таблицы во множественном числе, поэтому указывать имя таблицы не нужно. Мы просто передали разрешенные поля, которые будут вставлены в таблицу.
Создаём контроллер для CRUD в CodeIgniter 4
В CodeIgniter 4 вы можете создать файл контроллера с помощью команды spark. Теперь не нужно создавать контроллер вручную и создавать внутри него функции. Все будет автоматически сгенерировано.
Если вы хотите сгенерировать методы CRUD по умолчанию, вы можете поставить флаг --restful после имени контроллера. Это очень классная функция.
php spark make:controller PostController --restful
Здесь был создан контроллер. Вы можете взглянуть на файл контроллера.
Когда вы откроете этот файл, вы найдете в нем несколько методов. Взгляните на приведенный ниже код.
PostController.php
<?php
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class PostController extends ResourceController
{
/**
* Return an array of resource objects, themselves in array format
*
* @return mixed
*/
public function index()
{
//
}
/**
* Return the properties of a resource object
*
* @return mixed
*/
public function show($id = null)
{
//
}
/**
* Return a new resource object, with default properties
*
* @return mixed
*/
public function new()
{
//
}
/**
* Create a new resource object, from "posted" parameters
*
* @return mixed
*/
public function create()
{
//
}
/**
* Return the editable properties of a resource object
*
* @return mixed
*/
public function edit($id = null)
{
//
}
/**
* Add or update a model resource, from "posted" properties
*
* @return mixed
*/
public function update($id = null)
{
//
}
/**
* Delete the designated resource object from the model
*
* @return mixed
*/
public function delete($id = null)
{
//
}
}
Здесь все возможные методы сгенерированы по умолчанию для CRUD в CodeIgniter 4. Теперь мы должны добавить функциональные возможности для операции CRUD в CodeIgniter.
Создание операции CRUD в CodeIgniter 4
Внутри файла PostController.php просто вставьте приведенный ниже код.
PostController.php
<?php
namespace App\Controllers;
use App\Models\Post;
use CodeIgniter\RESTful\ResourceController;
class PostController extends ResourceController
{
private $post;
public function __construct()
{
helper(['form', 'url', 'session']);
$this->session = \Config\Services::session();
$this->post = new Post;
}
/**
* Return an array of resource objects, themselves in array format
*
* @return mixed
*/
public function index()
{
$posts = $this->post->orderBy('id', 'desc')->findAll();
return view('posts/index', compact('posts'));
}
/**
* Return the properties of a resource object
*
* @return mixed
*/
public function show($id = null)
{
$post = $this->post->find($id);
if($post) {
return view('posts/show', compact('post'));
}
else {
return redirect()->to('/posts');
}
}
/**
* Return a new resource object, with default properties
*
* @return mixed
*/
public function new()
{
return view('posts/create');
}
/**
* Create a new resource object, from "posted" parameters
*
* @return mixed
*/
public function create()
{
$inputs = $this->validate([
'title' => 'required|min_length[5]',
'description' => 'required|min_length[5]',
]);
if (!$inputs) {
return view('posts/create', [
'validation' => $this->validator
]);
}
$this->post->save([
'title' => $this->request->getVar('title'),
'description' => $this->request->getVar('description')
]);
session()->setFlashdata('success', 'Success! post created.');
return redirect()->to(site_url('/posts'));
}
/**
* Return the editable properties of a resource object
*
* @return mixed
*/
public function edit($id = null)
{
$post = $this->post->find($id);
if($post) {
return view('posts/edit', compact('post'));
}
else {
session()->setFlashdata('failed', 'Alert! no post found.');
return redirect()->to('/posts');
}
}
/**
* Add or update a model resource, from "posted" properties
*
* @return mixed
*/
public function update($id = null)
{
$inputs = $this->validate([
'title' => 'required|min_length[5]',
'description' => 'required|min_length[5]',
]);
if (!$inputs) {
return view('posts/create', [
'validation' => $this->validator
]);
}
$this->post->save([
'id' => $id,
'title' => $this->request->getVar('title'),
'description' => $this->request->getVar('description')
]);
session()->setFlashdata('success', 'Success! post updated.');
return redirect()->to(base_url('/posts'));
}
/**
* Delete the designated resource object from the model
*
* @return mixed
*/
public function delete($id = null)
{
$this->post->delete($id);
session()->setFlashdata('success', 'Success! post deleted.');
return redirect()->to(base_url('/posts'));
}
}
Позвольте мне объяснить каждую функцию, используемую внутри этого контроллера.
Объяснение PostController
Namespace
- В самом начале в пространстве имён мы импортировали модель Post и ResourceController.
- В следующей строке класс контроллера расширил ResourceController. В этом классе определены все методы CRUD.
Constructor
- Мы объявили частную переменную и вызвали ее внутри метода конструктора. Здесь, в конструкторе, были использованы вспомогательные функции. form helper используется здесь для операций, связанных с формой, таких как проверка и т. Д. Аналогичным образом, вспомогательная функция URL и сеанса для создания URL-адреса и заполнения флэш-сообщения. Также мы создали объект модели Post. Таким образом, мы можем использовать его дальше, и ему не потребуется создавать экземпляр снова.
CRUD Методы
- В методе index() мы получим все посты, используя модель Post, и вернем данные в index view. (Мы создадим это представление на следующем шаге).
- Метод show() используется для получения отдельного поста на основе идентификатора. Если пост будет найден, он вернется в представление show view.
- Метод new() предназначен только для загрузки представления создания публикации.
- В методе create(), мы установили правила проверки для проверки заголовка (title) и описания поста (description). Если данные не проверены, он вернется в то же представление с сообщением об ошибке проверки. В представлении мы отобразим это сообщение об ошибке проверки. Если входные данные подтверждены, то, используя экземпляр модели, мы сохранили его в таблице и установили сообщение об успешном завершении сеанса для флэш-данных. После этого перенаправили на список постов.
- Метод edit() используется для получения поста на основе идентификатора поста и возврата в режим редактирования. Если пост не будет найден, тогда будет перенаправлено на список сообщений с флэш-сообщением.
- В методе update() мы использовали ту же проверку, что и в методе create(). После успешной проверки мы обновим пост на основе идентификатора поста. После обновления будет установлено флэш-сообщение в сеансе и вернется к списку постов.
- Наконец, функция delete() используется для удаления поста на основе идентификатора. Если пост удален, будет установлено флэш-сообщение и вернется к списку постов.
Это всё, что касается методов CRUD в PostController.
Создание маршрутов для CRUD в CodeIgniter 4
Для создания маршрутов в CodeIgniter вам необходимо перейти к файлу Config/routes.php. Просто поместите указанные ниже маршруты в раздел определений маршрутов.
routes.php
$routes->get('posts', 'PostController::index');
$routes->get('posts/new', 'PostController::new');
$routes->post('posts', 'PostController::create');
$routes->get('posts/(:num)', 'PostController::show/$1');
$routes->get('posts/edit/(:num)', 'PostController::edit/$1');
$routes->put('posts/(:num)', 'PostController::update/$1');
$routes->delete('posts/(:num)', 'PostController::delete/$1');
После создания маршрутов мы создадим представления.
Создание представлений (Views) для приложения Crud в CodeIgniter 4
Перейдите в каталог app/Views и создайте там два подкаталога.
- layouts
- posts
Теперь внутри папки layouts создайте представление с именем master.php. На самом деле мы собирались использовать Bootstrap 5 для некоторого базового дизайна. Итак, мы будем использовать здесь концепцию основного представления, чтобы расширить один и тот же макет во всех представлениях. Это сэкономит наше время и код.
После этого внутри каталога posts создайте эти представления -
- create.php
- edit.php
- index.php
- show.php
Ваша структура должна выглядеть так:
- layouts
- master.php
- posts
- create.php
- edit.php
- index.php
- show.php
Вы можете увидеть на скриншоте ниже.
Отображение данных при просмотре в CodeIgniter 4
Начнем с основного вида. Итак, просто добавьте туда приведенный ниже код.
Master View
master.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CodeIgniter 4 CRUD Application | <?= $this->renderSection('title') ?></title>
<!-- bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css">
</head>
<body>
<div class="container-fluid py-4">
<h4 class="text-center fw-bold">CodeIgniter 4 CRUD Application</h4>
<?= $this->renderSection('content') ?>
</div>
<!-- bootstrap 5 bundle JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js" integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf" crossorigin="anonymous"></script>
</body>
</html>
В главном представлении мы использовали функцию renderSection(). Она создаст заполнитель для динамического размещения содержимого в представлении.
Создаем форму для создания нового поста
create.php
<?= $this->extend('layouts/master');
$this->section('title') ?> Create Post <?= $this->endSection() ?>
<?= $this->section('content') ?>
<div class="container">
<?php $validation = \Config\Services::validation(); ?>
<div class="row py-4">
<div class="col-xl-12 text-end">
<a href="<?= base_url('posts') ?>" class="btn btn-primary">Back to Posts</a>
</div>
</div>
<div class="row">
<div class="col-xl-6 m-auto">
<form method="POST" action="<?= base_url('posts') ?>">
<?= csrf_field() ?>
<div class="card shadow">
<div class="card-header">
<h5 class="card-title">Create Post</h5>
</div>
<div class="card-body p-4">
<div class="form-group mb-3 has-validation">
<label class="form-label">Post Title</label>
<input type="text" class="form-control <?php if($validation->getError('title')): ?>is-invalid<?php endif ?>" name="title" placeholder="Post Title" value="<?php echo set_value('title'); ?> "/>
<?php if ($validation->getError('title')): ?>
<div class="invalid-feedback">
<?= $validation->getError('title') ?>
</div>
<?php endif; ?>
</div>
<div class="form-group">
<label class="form-label">Description</label>
<textarea class="form-control <?php if($validation->getError('description')): ?>is-invalid<?php endif ?>" name="description" placeholder="Description"><?php echo set_value('description'); ?></textarea>
<?php if ($validation->getError('description')): ?>
<div class="invalid-feedback">
<?= $validation->getError('description') ?>
</div>
<?php endif; ?>
</div>
</div>
<div class="card-footer">
<button type="submit" class="btn btn-success">Save</button>
</div>
</div>
</form>
</div>
</div>
</div>
<?= $this->endSection() ?>
В представлении создания мы заполнили сообщение об ошибке проверки формы и создали форму для отправки сообщения.
Вид редактирования публикации
edit.php
<?= $this->extend('layouts/master');
$this->section('title') ?> Create Post <?= $this->endSection() ?>
<?= $this->section('content') ?>
<div class="container">
<?php $validation = \Config\Services::validation(); ?>
<div class="row py-4">
<div class="col-xl-12 text-end">
<a href="<?= base_url('posts') ?>" class="btn btn-primary">Back to Posts</a>
</div>
</div>
<div class="row">
<div class="col-xl-6 m-auto">
<form method="POST" action="<?= base_url('posts/'.$post['id']) ?>">
<?= csrf_field() ?>
<input type="hidden" name="_method" value="PUT"/>
<div class="card shadow">
<div class="card-header">
<h5 class="card-title">Update Post</h5>
</div>
<div class="card-body p-4">
<div class="form-group mb-3 has-validation">
<label class="form-label">Post Title</label>
<input type="text" class="form-control <?php if($validation->getError('title')): ?>is-invalid<?php endif ?>" name="title" placeholder="Post Title" value="<?php if($post['title']): echo $post['title']; else: set_value('title'); endif ?>"/>
<?php if ($validation->getError('title')): ?>
<div class="invalid-feedback">
<?= $validation->getError('title') ?>
</div>
<?php endif; ?>
</div>
<div class="form-group">
<label class="form-label">Description</label>
<textarea class="form-control <?php if($validation->getError('description')): ?>is-invalid<?php endif ?>" name="description" placeholder="Description"><?php if($post['description']): echo $post['description']; else: set_value('description'); endif ?></textarea>
<?php if ($validation->getError('description')): ?>
<div class="invalid-feedback">
<?= $validation->getError('description') ?>
</div>
<?php endif; ?>
</div>
</div>
<div class="card-footer">
<button type="submit" class="btn btn-success">Update</button>
</div>
</div>
</form>
</div>
</div>
</div>
<?= $this->endSection() ?>
Индексный вид для отображения всех постов
index.php
<?= $this->extend('layouts/master');
$this->section('title') ?> Posts <?= $this->endSection() ?>
<?= $this->section('content'); ?>
<div class="container">
<div class="row py-4">
<div class="col-xl-12 text-end">
<a href="<?= base_url('posts/new') ?>" class="btn btn-primary">Add Post</a>
</div>
</div>
<div class="row py-2">
<div class="col-xl-12">
<?php
if(session()->getFlashdata('success')):?>
<div class="alert alert-success alert-dismissible">
<button type="button" class="btn-close" data-bs-dismiss="alert">×</button>
<?php echo session()->getFlashdata('success') ?>
</div>
<?php elseif(session()->getFlashdata('failed')):?>
<div class="alert alert-danger alert-dismissible">
<button type="button" class="btn-close" data-bs-dismiss="alert">×</button>
<?php echo session()->getFlashdata('failed') ?>
</div>
<?php endif; ?>
<div class="card">
<div class="card-header">
<h5 class="card-title">Posts</h5>
</div>
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>Id</th>
<th>Title</th>
<th>Description</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
if (count($posts) > 0):
foreach ($posts as $post): ?>
<tr>
<td><?= $post['id'] ?></td>
<td><?= $post['title'] ?></td>
<td><?= $post['description'] ?></td>
<td class="d-flex">
<a href="<?= base_url('posts/'.$post['id']) ?>" class="btn btn-sm btn-info mx-1" title="Show"><i class="bi bi-info-square"></i></a>
<a href="<?= base_url('posts/edit/'.$post['id']) ?>" class="btn btn-sm btn-success mx-1" title="Edit"><i class="bi bi-pencil-square"></i></a>
<form class="display-none" method="post" action="<?= base_url('posts/'.$post['id'])?>" id="postDeleteForm<?=$post['id']?>">
<input type="hidden" name="_method" value="DELETE"/>
<a href="jаvascript:void(0)" onclick="deletePost('postDeleteForm<?=$post['id']?>')" class="btn btn-sm btn-danger" title="Delete"><i class="bi bi-trash"></i></a>
</form>
</td>
</tr>
<?php endforeach;
else: ?>
<tr rowspan="1">
<td colspan="4">
<h6 class="text-danger text-center">No post found</h6>
</td>
</tr>
<?php endif ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
function deletePost(formId) {
var confirm = window.confirm('Do you want to delete this post?');
if(confirm == true) {
document.getElementById(formId).submit();
}
}
</script>
<?= $this->endSection(); ?>
Вид просмотра поста
show.php
<?= $this->extend('layouts/master');
$this->section('title') ?> Show Post <?= $this->endSection() ?>
<?= $this->section('content') ?>
<div class="container">
<div class="row py-4">
<div class="col-xl-12 text-end">
<a href="<?= base_url('posts') ?>" class="btn btn-primary">Back to Posts</a>
</div>
</div>
<div class="row">
<div class="col-xl-6 m-auto">
<div class="card shadow">
<div class="card-header">
<h5 class="card-title">Show Post</h5>
</div>
<div class="card-body p-4">
<div class="form-group mb-3 has-validation">
<label class="form-label">Post Title</label>
<input type="text" class="form-control" disabled placeholder="Post Title" value="<?php echo trim($post['title']);?>"/>
</div>
<div class="form-group">
<label class="form-label">Description</label>
<textarea class="form-control" disabled name="description" placeholder="Description"><?php echo trim($post['description']);?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<?= $this->endSection() ?>
Результаты работы CRUD
Пришло время увидеть результаты операций CRUD. Итак, запустите приложение из командной строки с помощью php spark.
php spark serve
Откройте браузер и нажмите указанный выше URL-адрес - http://localhost:8080, чтобы увидеть результат.
Итак, перейдем к постам.
Список постов
В настоящее время у нас нет записей в таблице. Итак, во-первых, создадим пост. Просто нажмите кнопку Add Post.
Откроется новая страница для создания записи (поста).
Поскольку мы использовали проверку формы, вы увидите сообщение об ошибке проверки.
После создания записи вы будете перенаправлены в список постов с сообщением об успешном завершении. Потому что мы использовали флэш-данные сеанса для установки сообщения. Здесь мы создали несколько сообщений, чтобы вы могли видеть список.
Показать результат отдельной публикации
Когда вы нажмете show post, откроется новое представление с подробностями публикации. Это просто, чтобы показать сообщение, поэтому форма отключена.
Изменить/обновить результат публикации
Когда вы нажмете на действие редактирования, оно перенаправит вас к записи редактирования. Здесь проверка формы уже настроена, поэтому вы увидите сообщение об ошибке проверки.
После обновления поста вы будете перенаправлены обратно в список постов с сообщением.
Удаление поста
Когда вы нажмете на опцию удаления публикации, вам будет предложено подтверждение. Мы использовали для этого jаvascript.
После подтверждения пост будет удалитен с сообщением.
На этом наш урок по созданию CRUD приложения в CodeIgniter 4 для начинающих закончен.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.