Spec-Zone.ru › Yii 1.1

CCodeModel

Пакет system.gii
Наследование абстрактный класс CCodeModel » CFormModel » CModel » CComponent
Реализует IteratorAggregate, Traversable, ArrayAccess
С 1.1.2
Исходный код framework/gii/CCodeModel.php
CCodeModel — базовый класс для моделей классов, используемых для генерации кода.

Каждый генератор кода должен иметь по крайней мере один класс модели кода, расширяющий этот класс. Цель модели кода — представить параметры, введённые пользователем, и использовать их для генерации настраиваемого кода.

Производные классы должны реализовать метод prepare, основная задача которого — заполнить свойство files на основе параметров пользователя.

Свойство files должно быть заполнено набором экземпляров CCodeFile, каждый из которых представляет собой один файл кода, который будет сгенерирован.

CCodeModel реализует функцию "прилипающих атрибутов". Прилипающий атрибут — это атрибут, который может запоминать своё последнее допустимое значение, даже если пользователь закрывает окно браузера и открывает его снова. Чтобы объявить атрибут как прилипающий, просто перечислите его в правиле проверки с именем валидатора "sticky".

Общественные свойства

Свойство Тип Описание Определено
answers массив подтверждения пользователя о том, следует ли перезаписать существующие файлы кода новыми сгенерированными. CCodeModel
attributes массив Возвращает все значения атрибутов. CModel
errors массив Возвращает ошибки для всех атрибутов или одного атрибута. CModel
files массив список объектов CCodeFile, представляющих файлы кода, которые будут сгенерированы. CCodeModel
iterator CMapIterator Возвращает итератор для обхода атрибутов в модели. CModel
keywords CCodeModel
safeAttributeNames массив Возвращает имена атрибутов, которые безопасно присваивать. CModel
scenario строка Возвращает сценарий, в котором используется эта модель. CModel
status целое число статус этой модели. CCodeModel
stickyFile строка путь к файлу, хранящему значения прилипающих атрибутов. CCodeModel
template строка имя шаблона кода, выбранного пользователем. CCodeModel
templatePath строка каталог, содержащий файлы шаблонов. CCodeModel
templates массив Возвращает список доступных шаблонов кода (имя=>каталог). CCodeModel
validatorList CList Возвращает все валидаторы, объявленные в модели. CModel
validators массив Возвращает валидаторы, применимые к текущему сценарию. CModel

Общественные методы

Метод Описание Определено в
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() Конструктор. CFormModel
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
addError() Добавляет новую ошибку к указанному атрибуту. CModel
addErrors() Добавляет список ошибок. CModel
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Прикрепляет поведение к этому компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик событий к событию. CComponent
attributeLabels() Объявляет метки атрибутов модели. CCodeModel
attributeNames() Возвращает список имён атрибутов. CFormModel
behaviors() Возвращает список поведений, которые должна иметь эта модель. CModel
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
class2id() Преобразует имя класса в HTML-идентификатор. CCodeModel
class2name() Преобразует имя класса в слова, разделённые пробелами. CCodeModel
class2var() Преобразует имя класса в имя переменной с первой буквой в нижнем регистре. CCodeModel
classExists() Проверяет, существует ли класс с указанным именем (чувствительный к регистру). CCodeModel
clearErrors() Удаляет ошибки для всех атрибутов или одного атрибута. CModel
confirmed() CCodeModel
createValidators() Создаёт объекты валидаторов на основе спецификации в rules. CModel
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые поведения к этому компоненту. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые поведения к этому компоненту. CComponent
errorMessage() Возвращает сообщение, которое должно отображаться при возникновении ошибки во время сохранения файла кода. CCodeModel
evaluateExpression() Вычисляет PHP выражение или обратный вызов в контексте этого компонента. CComponent
generateAttributeLabel() Генерирует удобочитаемую метку атрибута. CModel
getAttributeLabel() Возвращает текстовую метку для указанного атрибута. CModel
getAttributes() Возвращает все значения атрибутов. CModel
getError() Возвращает первую ошибку указанного атрибута. CModel
getErrors() Возвращает ошибки для всех атрибутов или одного атрибута. CModel
getEventHandlers() Возвращает список прикреплённых обработчиков событий для события. CComponent
getIterator() Возвращает итератор для обхода атрибутов в модели. CModel
getSafeAttributeNames() Возвращает имена атрибутов, которые безопасны для массового присваивания. CModel
getScenario() Возвращает сценарий, в котором используется эта модель. CModel
getStickyFile() Возвращает путь к файлу, в котором хранятся значения «липких» атрибутов. CCodeModel
getTemplatePath() Возвращает директорию, содержащую шаблоны файлов. CCodeModel
getTemplates() Возвращает список доступных шаблонов кода (имя=>директория). CCodeModel
getValidatorList() Возвращает все объявленные в модели валидаторы. CModel
getValidators() Возвращает валидаторы, применимые к текущему сценарию. CModel
hasErrors() Возвращает значение, указывающее, есть ли ошибка валидации. CModel
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединённые обработчики для указанного события. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует эту модель. CFormModel
isAttributeRequired() Возвращает значение, указывающее, является ли атрибут обязательным. CModel
isAttributeSafe() Возвращает значение, указывающее, является ли атрибут безопасным для массового присваивания. CModel
loadStickyAttributes() Загружает «липкие» атрибуты из файла и заполняет ими модель. CCodeModel
offsetExists() Возвращает, существует ли элемент по указанному смещению. CModel
offsetGet() Возвращает элемент по указанному смещению. CModel
offsetSet() Устанавливает элемент по указанному смещению. CModel
offsetUnset() Удаляет элемент по указанному смещению. CModel
onAfterConstruct() Это событие срабатывает после создания экземпляра модели оператором new. CModel
onAfterValidate() Это событие срабатывает после выполнения валидации. CModel
onBeforeValidate() Это событие срабатывает перед выполнением валидации. CModel
onUnsafeAttribute() Этот метод вызывается, когда происходит массовое присваивание небезопасных атрибутов. CModel
pluralize() Преобразует слово в его множественную форму. CCodeModel
prepare() Подготавливает файлы кода для генерации. CCodeModel
raiseEvent() Вызывает событие. CComponent
render() Генерирует код, используя указанный шаблон файла кода. CCodeModel
renderResults() CCodeModel
requiredTemplates() Возвращает список необходимых шаблонов кода. CCodeModel
rules() Определяет правила валидации модели. CCodeModel
save() Сохраняет сгенерированный код в файлы. CCodeModel
saveStickyAttributes() Сохраняет атрибуты «sticky» в файл. CCodeModel
setAttributes() Устанавливает значения атрибутов массовым способом. CModel
setScenario() Устанавливает сценарий для модели. CModel
sticky() Валидатор «sticky». CCodeModel
successMessage() Возвращает сообщение, отображаемое при успешном сохранении сгенерированного кода. CCodeModel
unsetAttributes() Устанавливает атрибуты в null. CModel
validate() Выполняет валидацию. CModel
validateReservedWord() Проверяет атрибут на наличие PHP зарезервированного ключевого слова. CCodeModel
validateTemplate() Проверяет выбор шаблона. CCodeModel

Защищенные методы

Метод Описание Определен в
afterConstruct() Этот метод вызывается после создания экземпляра модели оператором new. CModel
afterValidate() Этот метод вызывается после завершения валидации. CModel
beforeValidate() Этот метод вызывается перед началом валидации. CModel

События

Событие Описание Определен в
onAfterConstruct Это событие срабатывает после создания экземпляра модели оператором new. CModel
onBeforeValidate Это событие срабатывает перед выполнением валидации. CModel
onAfterValidate Это событие срабатывает после выполнения валидации. CModel
onUnsafeAttribute Этот метод вызывается, когда происходит массовое присваивание небезопасных атрибутов. CModel

Подробное описание свойств

answers свойство

public array $answers;

подтверждения пользователя о том, следует ли перезаписывать существующие файлы кода новыми сгенерированными. Значение этого свойства управляется внутренне этим классом и CCodeGenerator.

files свойство

public array $files;

список объектов CCodeFile, представляющих файлы кода для генерации. Метод prepare() отвечает за заполнение этого свойства.

keywords свойство

public static $keywords;

status свойство

public integer $status;

состояние этой модели. Значение этого свойства управляется внутренне CCodeGenerator.

stickyFile свойство только для чтения

public string getStickyFile()

путь к файлу, хранящему значения атрибутов «sticky».

template свойство

public string $template;

имя шаблона кода, выбранного пользователем. Значение этого свойства управляется внутренне этим классом и CCodeGenerator.

templatePath свойство только для чтения

public string getTemplatePath()

каталог, содержащий файлы шаблонов.

templates свойство только для чтения

public array getTemplates()

Возвращает список доступных шаблонов кода (имя=>каталог). Этот метод просто возвращает значение свойства CCodeGenerator::templates.

Подробное описание методов

attributeLabels() метод

public array attributeLabels()
{return} массив метки атрибутов
Исходный код: framework/gii/CCodeModel.php#214 (показать)
public function attributeLabels()
{
    return array(
        
'template'=>'Code Template',
    );
}

Определяет метки атрибутов модели. Дочерние классы должны переопределять этот метод в следующем формате:

return array_merge(parent::attributeLabels(), array(
    ...labels for the child class attributes...
));

class2id() метод

public string class2id(string $name)
$name строка строка для преобразования
{return} строка результирующий идентификатор
Исходный код: framework/gii/CCodeModel.php#442 (показать)
public function class2id($name)
{
    return 
trim(strtolower(str_replace('_','-',preg_replace('/(?<![A-Z])[A-Z]/', '-\0', $name))),'-');
}

Преобразует имя класса в HTML-идентификатор. Например, «PostTag» будет преобразовано как «post-tag».

class2name() метод

public string class2name(string $name, boolean $ucwords=true)
$name строка строка для преобразования
$ucwords логическое значение преобразовывать ли первую букву каждого слова в верхний регистр
{return} строка результирующие слова
Исходный код: framework/gii/CCodeModel.php#454 (показать)
public function class2name($name,$ucwords=true)
{
    
$result=trim(strtolower(str_replace('_',' ',preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $name))));
    return 
$ucwords ? ucwords($result) : $result;
}

Преобразует имя класса в слова, разделенные пробелами. Например, «PostTag» будет преобразовано как «Post Tag».

class2var() метод (доступен начиная с версии 1.1.4)

public string class2var(string $name)
$name string имя класса
{return} string имя переменной, преобразованное из имени класса
Исходный код: framework/gii/CCodeModel.php#467 (показать)
public function class2var($name)
{
    
$name[0]=strtolower($name[0]);
    return 
$name;
}

Преобразует имя класса в имя переменной, с первой буквой в нижнем регистре. Этот метод предоставляется, поскольку функция lcfirst() PHP доступна только для PHP 5.3+.

classExists() метод

public boolean classExists(string $name)
$name string имя класса для проверки
{return} boolean существует ли класс
Исходный код: framework/gii/CCodeModel.php#199 (показать)
public function classExists($name)
{
    return 
class_exists($name,false) && in_array($name, get_declared_classes());
}

Проверяет, существует ли класс с указанным именем (с учетом регистра).

confirmed() метод

public bool confirmed(CCodeFile $file)
$file CCodeFile файл кода должен быть сохранён
{return} bool найдена ли информация о подтверждении в answers с соответствующей операцией
Исходный код: framework/gii/CCodeModel.php#296 (показать)
public function confirmed($file)
{
    return 
$this->answers===null && $file->operation===CCodeFile::OP_NEW
        
|| is_array($this->answers) && isset($this->answers[md5($file->path)]);
}

errorMessage() метод

public string errorMessage()
{return} string сообщение, отображаемое при возникновении ошибки во время сохранения файла кода.
Исходный код: framework/gii/CCodeModel.php#261 (показать)
public function errorMessage()
{
    return 
'There was some error when generating the code. Please check the following messages.';
}

Возвращает сообщение, отображаемое при возникновении ошибки во время сохранения файла кода. Дочерние классы должны переопределить этот метод, если необходимо настроить сообщение.

getStickyFile() метод

public string getStickyFile()
{return} string путь к файлу, хранящему значения атрибутов sticky.
Исходный код: framework/gii/CCodeModel.php#394 (показать)
public function getStickyFile()
{
    return 
Yii::app()->runtimePath.'/gii-'.Yii::getVersion().'/'.get_class($this).'.php';
}

getTemplatePath() метод

public string getTemplatePath()
{return} string директория, содержащая файлы шаблонов.
Исходный код: framework/gii/CCodeModel.php#280 (показать)
public function getTemplatePath()
{
    
$templates=$this->getTemplates();
    if(isset(
$templates[$this->template]))
        return 
$templates[$this->template];
    elseif(empty(
$templates))
        throw new 
CHttpException(500,'No templates are available.');
    else
        throw new 
CHttpException(500,'Invalid template selection.');

}

getTemplates() метод

public array getTemplates()
{return} array список доступных шаблонов кода (имя=>директория).
Исходный код: framework/gii/CCodeModel.php#271 (показать)
public function getTemplates()
{
    return 
Yii::app()->controller->templates;
}

Возвращает список доступных шаблонов кода (имя=>директория). Этот метод просто возвращает значение свойства CCodeGenerator::templates.

loadStickyAttributes() метод

public void loadStickyAttributes()
Исходный код: framework/gii/CCodeModel.php#362 (показать)
public function loadStickyAttributes()
{
    
$this->_stickyAttributes=array();
    
$path=$this->getStickyFile();
    if(
is_file($path))
    {
        
$result=@include($path);
        if(
is_array($result))
        {
            
$this->_stickyAttributes=$result;
            foreach(
$this->_stickyAttributes as $name=>$value)
            {
                if(
property_exists($this,$name) || $this->canSetProperty($name))
                    
$this->$name=$value;
            }
        }
    }
}

Загружает атрибуты sticky из файла и заполняет ими модель.

pluralize() метод

public string pluralize(string $name)
$name string слово, которое нужно привести к множественному числу
{return} string слово во множественном числе
Исходный код: framework/gii/CCodeModel.php#406 (показать)
public function pluralize($name)
{
    
$rules=array(
        
'/(m)ove$/i' => '\1oves',
        
'/(f)oot$/i' => '\1eet',
        
'/(c)hild$/i' => '\1hildren',
        
'/(h)uman$/i' => '\1umans',
        
'/(m)an$/i' => '\1en',
        
'/(s)taff$/i' => '\1taff',
        
'/(t)ooth$/i' => '\1eeth',
        
'/(p)erson$/i' => '\1eople',
        
'/([m|l])ouse$/i' => '\1ice',
        
'/(x|ch|ss|sh|us|as|is|os)$/i' => '\1es',
        
'/([^aeiouy]|qu)y$/i' => '\1ies',
        
'/(?:([^f])fe|([lr])f)$/i' => '\1\2ves',
        
'/(shea|lea|loa|thie)f$/i' => '\1ves',
        
'/([ti])um$/i' => '\1a',
        
'/(tomat|potat|ech|her|vet)o$/i' => '\1oes',
        
'/(bu)s$/i' => '\1ses',
        
'/(ax|test)is$/i' => '\1es',
        
'/s$/' => 's',
    );
    foreach(
$rules as $rule=>$replacement)
    {
        if(
preg_match($rule,$name))
            return 
preg_replace($rule,$replacement,$name);
    }
    return 
$name.'s';
}

Преобразует слово в его форму множественного числа. Обратите внимание, что это только для английского языка! Например, 'яблоко' станет 'яблоки', а 'ребёнок' станет 'дети'.

prepare() метод

abstract public void prepare()
Исходный код: framework/gii/CCodeModel.php#150 (показать)
abstract public function prepare();

Подготавливает файлы кода для генерации. Это основной метод, который должны реализовывать дочерние классы. Он должен содержать логику, которая заполняет свойство files списком файлов кода, которые будут сгенерированы.

render() метод

public string render(string $templateFile, array $_params_=NULL)
$templateFile string путь к файлу шаблона кода
$_params_ array набор параметров, которые будут извлечены и сделаны доступными в шаблоне кода
{return} string сгенерированный код
Исходный код: framework/gii/CCodeModel.php#310 (показать)
public function render($templateFile,$_params_=null)
{
    if(!
is_file($templateFile))
        throw new 
CException("The template file '$templateFile' does not exist.");

    if(
is_array($_params_))
        
extract($_params_,EXTR_PREFIX_SAME,'params');
    else
        
$params=$_params_;
    
ob_start();
    
ob_implicit_flush(false);
    require(
$templateFile);
    return 
ob_get_clean();
}

Генерирует код, используя указанный файл шаблона кода. Этот метод в основном используется в generate для генерации кода.

renderResults() метод

public string renderResults()
{return} string журнал результатов генерации кода.
Исходный код: framework/gii/CCodeModel.php#328 (показать)
public function renderResults()
{
    
$output='Generating code using template "'.$this->templatePath."\"...\n";
    foreach(
$this->files as $file)
    {
        if(
$file->error!==null)
            
$output.="<span class=\"error\">generating {$file->relativePath}<br/>           {$file->error}</span>\n";
        elseif(
$file->operation===CCodeFile::OP_NEW && $this->confirmed($file))
            
$output.=' generated '.$file->relativePath."\n";
        elseif(
$file->operation===CCodeFile::OP_OVERWRITE && $this->confirmed($file))
            
$output.=' overwrote '.$file->relativePath."\n";
        else
            
$output.='   skipped '.$file->relativePath."\n";
    }
    
$output.="done!\n";
    return 
$output;
}

requiredTemplates() метод

public array requiredTemplates()
{return} array список необходимых шаблонов кода. Они должны быть путями к файлам, относительными к templatePath.
Исходный код: framework/gii/CCodeModel.php#227 (показать)
public function requiredTemplates()
{
    return array();
}

Возвращает список необходимых шаблонов кода. Производные классы обычно должны переопределить этот метод.

rules() метод

public array rules()
{return} array правила валидации
Исходный код: framework/gii/CCodeModel.php#162 (показать)
public function rules()
{
    return array(
        array(
'template', 'required'),
        array(
'template', 'validateTemplate', 'skipOnError'=>true),
        array(
'template', 'sticky'),
    );
}

Объявляет правила валидации модели. Дочерние классы должны переопределить этот метод в следующем формате:

return array_merge(parent::rules(), array(
    ...rules for the child class...
));

save() метод

public void save()
Исходный код: framework/gii/CCodeModel.php#235 (показать)
public function save()
{
    
$result=true;
    foreach(
$this->files as $file)
    {
        if(
$this->confirmed($file))
            
$result=$file->save() && $result;
    }
    return 
$result;
}

Сохраняет сгенерированный код в файлы.

saveStickyAttributes() метод

public void saveStickyAttributes()
Исходный код: framework/gii/CCodeModel.php#384 (показать)
public function saveStickyAttributes()
{
    
$path=$this->getStickyFile();
    @
mkdir(dirname($path),0755,true);
    
file_put_contents($path,"<?php\nreturn ".var_export($this->_stickyAttributes,true).";\n");
}

Сохраняет атрибуты sticky в файл.

sticky() метод

public void sticky(string $attribute, array $params)
$attribute строка атрибут, подлежащий проверке
$params массив параметры проверки
Исходный код: framework/gii/CCodeModel.php#353 (показать)
public function sticky($attribute,$params)
{
    if(!
$this->hasErrors())
        
$this->_stickyAttributes[$attribute]=$this->$attribute;
}

Валидатор «sticky». Этот валидатор фактически не проверяет атрибуты. Он сохраняет значение атрибута в файле, чтобы оно оставалось «прилипшим».

successMessage() метод

public string successMessage()
{return} строка сообщение, отображаемое при успешном сохранении сгенерированного кода.
Исходный код: framework/gii/CCodeModel.php#251 (показать)
public function successMessage()
{
    return 
'The code has been generated successfully.';
}

Возвращает сообщение, отображаемое при успешном сохранении сгенерированного кода. Дочерние классы должны переопределять этот метод, если требуется настройка сообщения.

validateReservedWord() метод

public void validateReservedWord(string $attribute, array $params)
$attribute строка атрибут, подлежащий проверке
$params массив параметры проверки
Исходный код: framework/gii/CCodeModel.php#478 (показать)
public function validateReservedWord($attribute,$params)
{
    
$value=$this->$attribute;
    if(
in_array(strtolower($value),self::$keywords))
        
$this->addError($attribute, $this->getAttributeLabel($attribute).' cannot take a reserved PHP keyword.');
}

Проверяет атрибут, чтобы убедиться, что он не является зарезервированным ключевым словом PHP.

validateTemplate() метод

public void validateTemplate(string $attribute, array $params)
$attribute строка атрибут, подлежащий проверке
$params массив параметры проверки
Исходный код: framework/gii/CCodeModel.php#178 (показать)
public function validateTemplate($attribute,$params)
{
    
$templates=$this->templates;
    if(!isset(
$templates[$this->template]))
        
$this->addError('template', 'Invalid template selection.');
    else
    {
        
$templatePath=$this->templatePath;
        foreach(
$this->requiredTemplates() as $template)
        {
            if(!
is_file($templatePath.'/'.$template))
                
$this->addError('template', "Unable to find the required code template file '$template'.");
        }
    }
}

Проверяет выбор шаблона. Этот метод проверяет, выбрал ли пользователь существующий шаблон и содержит ли шаблон все необходимые файлы шаблона, как указано в requiredTemplates.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CCodeModel

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API