CodeIgniter 4 использует систему моделей для удобного взаимодействия с базой данных. Модели упрощают работу с данными, позволяя выполнять CRUD-операции без необходимости писать SQL-запросы вручную.
Модели в CodeIgniter 4 хранятся в папке app/Models и должны наследовать класс CodeIgniter\Model. Рассмотрим создание базовой модели:
namespace App\Models;
use CodeIgniter\Model;
class BaseModel extends Model
{
protected $table = 'table_name';
protected $primaryKey = 'id';
protected $allowedFields = ['field1', 'field2', 'field3'];
}
Создадим модель для работы с таблицей пользователей. Она включает в себя поддержку авторизации через соцсети, валидацию данных и временные метки:
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'users';
protected $primaryKey = 'id';
protected $allowedFields = [
'username', 'email', 'password_hash', 'auth_provider', 'auth_id',
'full_name', 'birth_date', 'address', 'phone', 'avatar',
'is_verified', 'verification_token', 'last_login'
];
protected $returnType = 'array';
protected $useTimestamps = true;
protected $createdField = 'created_at';
protected $updatedField = 'last_login';
protected $validationRules = [
'email' => 'required|valid_email|is_unique[users.email]',
'username' => 'required|min_length[3]|max_length[50]|is_unique[users.username]',
'password_hash' => 'required|min_length[8]',
];
protected $validationMessages = [
'email' => [
'required' => 'Поле Email обязательно для заполнения.',
'valid_email' => 'Введите корректный Email.',
'is_unique' => 'Такой Email уже зарегистрирован.',
],
'username' => [
'required' => 'Поле Имя пользователя обязательно.',
'min_length' => 'Имя пользователя должно содержать не менее 3 символов.',
'max_length' => 'Имя пользователя должно содержать не более 50 символов.',
'is_unique' => 'Такое имя пользователя уже занято.',
],
'password_hash' => [
'required' => 'Пароль обязателен.',
'min_length' => 'Пароль должен содержать не менее 8 символов.',
],
];
protected $skipValidation = false;
}
После создания модели можно использовать её в контроллере для работы с пользователями:
namespace App\Controllers;
use App\Models\UserModel;
use CodeIgniter\Controller;
class UsersController extends Controller
{
public function register()
{
$model = new UserModel();
$data = [
'username' => $this->request->getPost('username'),
'email' => $this->request->getPost('email'),
'password_hash' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
'is_verified' => 0,
'verification_token' => bin2hex(random_bytes(16)),
];
if ($model->insert($data)) {
return redirect()->to('/register-success');
} else {
return view('register', ['errors' => $model->errors()]);
}
}
}