Инструменты пользователя

Инструменты сайта


lssexampl-03-ref

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
lssexampl-03-ref [2024/07/08 13:00] – внешнее изменение 127.0.0.1lssexampl-03-ref [2026/04/28 12:48] (текущий) – [Создание контроллеров источников данных] madmin
Строка 94: Строка 94:
 Контроллеры источников данных **DataSource** размещаются в папке **php/datasources**. В подпапке **autogen** размещаются контроллеры, автоматически сформированные по описанию структуры данных, см [[lssexampl-02-datastru]]. Для автоматического формирования этих контроллеров следует использовать экранную форму **Разработка/Структура базы**, вызвав в ней пункт меню **Пересчет/Генератор классов DataSource**. Контроллеры источников данных **DataSource** размещаются в папке **php/datasources**. В подпапке **autogen** размещаются контроллеры, автоматически сформированные по описанию структуры данных, см [[lssexampl-02-datastru]]. Для автоматического формирования этих контроллеров следует использовать экранную форму **Разработка/Структура базы**, вызвав в ней пункт меню **Пересчет/Генератор классов DataSource**.
  
-В корне папки **php/datasources** можно размещать контроллеры, унаследованные от автоматически сформированных, переопределяя заданные там методы и свойства. Для примера, возьмем контроллер для таблицы типов ремонтов **repair**. +В корне папки **php/datasources** можно размещать контроллеры, унаследованные от автоматически сформированных, переопределяя заданные там методы и свойства. 
-Реализуем в нем проверку на уникальность содержимого поля **name**. Эта проверка и так есть - за счет уникального индекса на сервере PostgreSQL, см файл **sql/tables.sql**: +
-<code> +
-alter table "repair" add unique("name") deferrable initially deferred; +
-</code> +
-Эта проверка на уникальность происходит при завершении транзакции, но текст сообщения об ошибке выдается SQL сервером автоматически и может быть непонятен пользователю.+
  
-Добавим проверку на уникальность, цель которой - выдать наглядное сообщение при возникновении ошибки. Вот содержимое файла контроллера источника данных для таблицы **repair**, файл **php/datasources/repair.php**: 
-<code> 
-<?php 
-class DataSource_Repair_Ext extends DataSource_Repair { 
-  /// переопределяем проверку после правки строки 
-  protected function onRowValid(&$row) { 
-    {  // проверка значения поля name на уникальность - для более понятного пользователю сообщения об ошибке 
-    $sql_name=$this->str2Sql($row['name']); 
-    $sql_id=$this->str2Sql($row['id']); 
-    $sql=<<<SQL 
-select count(*) as n 
-from 
- "repair" 
-where 
- "repair".name='{$sql_name}' and 
- "repair".id<>'{$sql_id}' 
-SQL; 
-    $rec=$this->pdoFetch($sql); 
-    if ($rec['n']) throw new Exception("Вид ремонта '{$row['name']}' уже есть"); 
-  } 
-  } 
-} 
-return new DataSource_Repair_Ext(); 
-</code> 
-Обратите внимание: 
-  * класс унаследован от автоматически сформированного контроллера **DataSource_Repair** 
-  * в конце программного кода создается и возвращается экземпляр описанного в файле контроллера **DataSource_Repair_Ext** 
-Сравните, в справочнике **Типы оборудования** проверка на уникальность поля **name** выполняется только средствами SQL сервера, а в справочнике **Виды ремонта** - перед завершением транзакции выполняется реализованная в **DataSource** проверка, и сообщение об ошибке оказывается более понятным. 
 ==== Создание пунктов меню, для вызова экранных форм справочников ==== ==== Создание пунктов меню, для вызова экранных форм справочников ====
 Главное меню проекта описывается в XML файле **php/config/appmenu.xml**. Скорректируем его описателями для вызова экранных форм справочников: Главное меню проекта описывается в XML файле **php/config/appmenu.xml**. Скорректируем его описателями для вызова экранных форм справочников:
lssexampl-03-ref.txt · Последнее изменение: 2026/04/28 12:48 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki