Модели. Создание моделей, наполнение моделей свойствами. Подключение моделей.

Для того чтобы создать и подключить модель, необходимо реализовать следующую конструкцию.


$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/ и увидим

Выводятся все данные из модели.

Узнать всю информацию по работе с моделью, можно по этой ссылке.

 

© 2015 - 2018