Для того чтобы создать и подключить модель, необходимо реализовать следующую конструкцию.
$this -> model('Books');
В примере показано создание модели книг. $this -> model(ИмяМодели); принимает один аргумент - это Имя модели. По стандартам Prologue-Framework имя модели пишется в UpperCamelCase.
Напишем подключение модели Books в нашем контроллере в методе index() и обновим страницу приложения в браузере. После данного действия создастся файл модели по пути /Project/models/Books.php
Файл представления
<?php
defined('PROLOGUE__FRAMEWORK') or die ;
Class Books extends PrModel {
protected function init() {
/*
* Create column in this model table.
*
* $this -> column('field_1.text');
* $this -> column('field_2.int');
* $this -> column('field_3.tinytext');
*
* other types...
*
*/
}
}
Класс модели создан.
В методе init() опишем наш объект. Зададим свойства которые есть у нашего объекта.
protected function init() {
$this -> column('name.tinytext');
$this -> column('description.text');
}
Мы создали два свойства name и description. name имеет тип tinytext, description имеет тип text
Запись данных в модель
Мы уже рассматривали как работать с формой. Посмотреть можно по этой ссылке
Сейчас напишем код, который сохранит во эти данные
Эти данные взяты из примера работы с формой.
Пишем код:
protected function saveBook() {
# если текущий url /books/save/ #
if ($this -> rout -> get('method') == 'save') {
# если поля с формы не пустые #
if ($this -> form -> input('name') AND $this -> form -> input('description')) {
# записываем данные в модель #
$this -> Books -> newRecord([
'name' => $this -> form -> input('name'),
'description' => $this -> form -> input('description')]);
}
# Подключаем представление /Project/views/pages/books/save.php #
$this -> view -> display('/Project/views/pages/books/save');
}
}
Этот код позволит сохранить данные name и description из формы в модель. Модель сохранит эти данные в базу данных. Итак, перейдем на страничку, заполним форму и нажмем кнопку сохранения. Если все сделано корректно, то зайдя в базу данных, найдя там таблицу Books мы увидим
Запись сохранилась в базу! Теперь напишем метод который вернет нам все записи из этой модели.
Пишем код:
protected function listBooks() {
if ($this -> rout -> get('method') == 'list') {
$books = $this -> Books -> getRecords();
$this -> view -> books = $books;
$this -> view -> display('/Project/views/pages/books/list');
}
}
И добавляем его в инициализацию
$this -> init([
'router',
'saveBook',
'listBooks']);
В результате контроллер должен иметь следующий вид:
<?php
defined('PROLOGUE__FRAMEWORK') or die ;
final Class BooksController extends PrController {
public function index() {
$this -> component('basic');
$this -> lang('books');
$this -> model('Books');
$this -> init([
'router',
'saveBook',
'listBooks']);
}
protected function router() {
# Ограничеваем вложенность роута до 3 уровней (Классика) #
if ($this -> url(4)) {
$this -> error(404);
}
# построение шаблона роута #
$this -> rout -> set('/controller/method/value/');
}
protected function saveBook() {
# если текущий url /books/save/ #
if ($this -> rout -> get('method') == 'save') {
# если поля с формы не пустые #
if ($this -> form -> input('name') AND $this -> form -> input('description')) {
# записываем данные в модель #
$this -> Books -> newRecord([
'name' => $this -> form -> input('name'),
'description' => $this -> form -> input('description')]);
}
# Подключаем представление /Project/views/pages/books/save.php #
$this -> view -> display('/Project/views/pages/books/save');
}
}
protected function listBooks() {
if ($this -> rout -> get('method') == 'list') {
$books = $this -> Books -> getRecords();
$this -> view -> books = $books;
$this -> view -> display('/Project/views/pages/books/list');
}
}
}
Файл представления
<?php
/** @var array $page */
/** @var string $title */
/** @var string $h1 */
/** @var string $description */
/** @var string $keyword */
/** @var array $props */
defined('PROLOGUE__FRAMEWORK') or die;
?>
<?php $this->display('Project/views/header');?>
<?php if ($books) {?>
<!--Создадим таблицу в которой будем выводить значения из базы данных -->
<table>
<tbody>
<tr>
<td>id</td>
<td>Название</td>
<td>Описание</td>
</tr>
<?php foreach($books as $book){ ?>
<tr>
<td><?=$book['id']?></td>
<td><?=$book['name']?></td>
<td><?=$book['description']?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } ?>
<?php $this->display('Project/views/footer');?>
Теперь откроем вашсайт.ру/books/list/ и увидим
Выводятся все данные из модели.
Узнать всю информацию по работе с моделью, можно по этой ссылке.