Class yii\gii\generators\model\Generator

Inheritanceyii\gii\generators\model\Generator » yii\gii\Generator » yii\base\Model » yii\base\Component » yii\base\BaseObject
ImplementsArrayAccess, IteratorAggregate, yii\base\Arrayable, yii\base\Configurable, yii\base\StaticInstanceInterface
Uses Traitsyii\base\ArrayableTrait, yii\base\StaticInstanceTrait
Available since version2.0
Source Code https://github.com/yiisoft/yii2-gii/blob/master/generators/model/Generator.php

This generator will generate one or multiple ActiveRecord classes for the specified database table.

Public Properties

Hide inherited properties

Property Type Description Defined By
$activeValidators yii\validators\Validator[] The validators applicable to the current $scenario. yii\base\Model
$attributes array Attribute values (name => value). yii\base\Model
$baseClass string yii\gii\generators\model\Generator
$behaviors yii\base\Behavior[] List of behaviors attached to this component. yii\base\Component
$classNames string[] yii\gii\generators\model\Generator
$db yii\gii\generators\model\Generator
$description string The detailed description of the generator. yii\gii\Generator
$enableI18N boolean Whether the strings will be generated using Yii::t() or PHP strings. yii\gii\Generator
$errors array Errors for all attributes or the specified attribute. yii\base\Model
$firstErrors array The first errors. yii\base\Model
$generateJunctionRelationMode yii\gii\generators\model\Generator
$generateLabelsFromComments yii\gii\generators\model\Generator
$generateQuery yii\gii\generators\model\Generator
$generateRelationNameFromDestinationTable yii\gii\generators\model\Generator
$generateRelations yii\gii\generators\model\Generator
$generateRelationsFromCurrentSchema yii\gii\generators\model\Generator
$iterator ArrayIterator An iterator for traversing the items in the list. yii\base\Model
$messageCategory string The message category used by Yii::t() when $enableI18N is true, defaults to app. yii\gii\Generator
$modelClass string yii\gii\generators\model\Generator
$name string The name of the generator. yii\gii\Generator
$ns yii\gii\generators\model\Generator
$queryBaseClass string yii\gii\generators\model\Generator
$queryClass string|null yii\gii\generators\model\Generator
$queryNs yii\gii\generators\model\Generator
$scenario string The scenario that this model is in. yii\base\Model
$singularize yii\gii\generators\model\Generator
$standardizeCapitals yii\gii\generators\model\Generator
$stickyDataFile string The file path that stores the sticky attribute values. yii\gii\Generator
$tableName string yii\gii\generators\model\Generator
$tableNames string[]|null yii\gii\generators\model\Generator
$tablePrefix string yii\gii\generators\model\Generator
$template string The name of the code template that the user has selected. yii\gii\Generator
$templatePath string The root path of the template files that are currently being used. yii\gii\Generator
$templates array[] A list of available code templates. yii\gii\Generator
$useClassConstant yii\gii\generators\model\Generator
$useSchemaName yii\gii\generators\model\Generator
$useTablePrefix yii\gii\generators\model\Generator
$validators ArrayObject|yii\validators\Validator[] All the validators declared in the model. yii\base\Model

Protected Properties

Hide inherited properties

Property Type Description Defined By

Public Methods

Hide inherited methods

Method Description Defined By
__call() Calls the named method which is not a class method. yii\base\Component
__clone() This method is called after the object is created by cloning an existing one. yii\base\Model
__construct() Constructor. yii\base\BaseObject
__get() Returns the value of a component property. yii\base\Component
__isset() Checks if a property is set, i.e. defined and not null. yii\base\Component
__set() Sets the value of a component property. yii\base\Component
__unset() Sets a component property to be null. yii\base\Component
actionGenerateClassName() Action to generate class name. yii\gii\generators\model\Generator
activeAttributes() Returns the attribute names that are subject to validation in the current scenario. yii\base\Model
addError() Adds a new error to the specified attribute. yii\base\Model
addErrors() Adds a list of errors. yii\base\Model
afterValidate() This method is invoked after validation ends. yii\base\Model
attachBehavior() Attaches a behavior to this component. yii\base\Component
attachBehaviors() Attaches a list of behaviors to the component. yii\base\Component
attributeHints() Returns the attribute hints. yii\base\Model
attributeLabels() Returns the attribute labels. yii\gii\generators\model\Generator
attributes() Returns the list of attribute names. yii\base\Model
autoCompleteData() Returns the list of auto complete values. yii\gii\generators\model\Generator
beforeValidate() This method is invoked before validation starts. yii\base\Model
behaviors() Returns a list of behaviors that this component should behave as. yii\base\Component
canGetProperty() Returns a value indicating whether a property can be read. yii\base\Component
canSetProperty() Returns a value indicating whether a property can be set. yii\base\Component
className() Returns the fully qualified name of this class. yii\base\BaseObject
clearErrors() Removes errors for all attributes or a single attribute. yii\base\Model
createValidators() Creates validator objects based on the validation rules specified in rules(). yii\base\Model
defaultTemplate() Returns the root path to the default code template files. yii\gii\Generator
detachBehavior() Detaches a behavior from the component. yii\base\Component
detachBehaviors() Detaches all behaviors from the component. yii\base\Component
ensureBehaviors() Makes sure that the behaviors declared in behaviors() are attached to this component. yii\base\Component
extraFields() Returns the list of fields that can be expanded further and returned by toArray(). yii\base\ArrayableTrait
fields() Returns the list of fields that should be returned by default by toArray() when no specific fields are specified. yii\base\ArrayableTrait
formName() Returns the form name that this model class should use. yii\base\Model
formView() Returns the view file for the input form of the generator. yii\gii\Generator
generate() Generates the code based on the current user input and the specified code template files. yii\gii\generators\model\Generator
generateAttributeLabel() Generates a user friendly attribute label based on the give attribute name. yii\base\Model
generateLabels() Generates the attribute labels for the specified table. yii\gii\generators\model\Generator
generateRelationsClassHints() Generates the relation class hints for the relation methods yii\gii\generators\model\Generator
generateRules() Generates validation rules for the specified table. yii\gii\generators\model\Generator
generateString() Generates a string depending on the $enableI18N property yii\gii\Generator
generateTableName() Generates the table name by considering table prefix. yii\gii\generators\model\Generator
getActiveValidators() Returns the validators applicable to the current $scenario. yii\base\Model
getAttributeHint() Returns the text hint for the specified attribute. yii\base\Model
getAttributeLabel() Returns the text label for the specified attribute. yii\base\Model
getAttributes() Returns attribute values. yii\base\Model
getBehavior() Returns the named behavior object. yii\base\Component
getBehaviors() Returns all behaviors attached to this component. yii\base\Component
getDescription() Returns the detailed description of the generator. yii\gii\generators\model\Generator
getEnum() Prepares ENUM field values. yii\gii\generators\model\Generator
getErrorSummary() Returns the errors for all attributes as a one-dimensional array. yii\base\Model
getErrors() Returns the errors for all attributes or a single attribute. yii\base\Model
getFirstError() Returns the first error of the specified attribute. yii\base\Model
getFirstErrors() Returns the first error of every attribute in the model. yii\base\Model
getIterator() Returns an iterator for traversing the attributes in the model. yii\base\Model
getName() Returns the name of the code generator. yii\gii\generators\model\Generator
getScenario() Returns the scenario that this model is used in. yii\base\Model
getStickyDataFile() Returns the file path that stores the sticky attribute values. yii\gii\Generator
getTablePrefix() Returns the tablePrefix property of the DB connection as specified yii\gii\generators\model\Generator
getTemplatePath() yii\gii\Generator
getValidators() Returns all the validators declared in rules(). yii\base\Model
hasErrors() Returns a value indicating whether there is any validation error. yii\base\Model
hasEventHandlers() Returns a value indicating whether there is any handler attached to the named event. yii\base\Component
hasMethod() Returns a value indicating whether a method is defined. yii\base\Component
hasProperty() Returns a value indicating whether a property is defined for this component. yii\base\Component
hints() Returns the list of hint messages. yii\gii\generators\model\Generator
init() yii\gii\generators\model\Generator
instance() Returns static class instance, which can be used to obtain meta information. yii\base\StaticInstanceTrait
isAttributeActive() Returns a value indicating whether the attribute is active in the current scenario. yii\base\Model
isAttributeRequired() Returns a value indicating whether the attribute is required. yii\base\Model
isAttributeSafe() Returns a value indicating whether the attribute is safe for massive assignments. yii\base\Model
isReservedKeyword() yii\gii\Generator
load() Populates the model with input data. yii\base\Model
loadMultiple() Populates a set of models with the data from end user. yii\base\Model
off() Detaches an existing event handler from this component. yii\base\Component
offsetExists() Returns whether there is an element at the specified offset. yii\base\Model
offsetGet() Returns the element at the specified offset. yii\base\Model
offsetSet() Sets the element at the specified offset. yii\base\Model
offsetUnset() Sets the element value at the specified offset to null. yii\base\Model
on() Attaches an event handler to an event. yii\base\Component
onUnsafeAttribute() This method is invoked when an unsafe attribute is being massively assigned. yii\base\Model
render() Generates code using the specified code template and parameters. yii\gii\Generator
requiredTemplates() Returns a list of code template files that are required. yii\gii\generators\model\Generator
rules() Returns the validation rules for attributes. yii\gii\generators\model\Generator
safeAttributes() Returns the attribute names that are safe to be massively assigned in the current scenario. yii\base\Model
save() Saves the generated code into files. yii\gii\Generator
scenarios() Returns a list of scenarios and the corresponding active attributes. yii\base\Model
setAttributes() Sets the attribute values in a massive way. yii\base\Model
setScenario() Sets the scenario for the model. yii\base\Model
stickyAttributes() Returns the list of sticky attributes. yii\gii\generators\model\Generator
successMessage() Returns the message to be displayed when the newly generated code is saved successfully. yii\gii\Generator
toArray() Converts the model into an array. yii\base\ArrayableTrait
trigger() Triggers an event. yii\base\Component
validate() Performs the data validation. yii\base\Model
validateClass() An inline validator that checks if the attribute value refers to an existing class name. yii\gii\Generator
validateDb() Validates the $db attribute. yii\gii\generators\model\Generator
validateMessageCategory() Checks if message category is not empty when I18N is enabled. yii\gii\Generator
validateModelClass() Validates the $modelClass attribute. yii\gii\generators\model\Generator
validateMultiple() Validates multiple models. yii\base\Model
validateNamespace() Validates the namespace. yii\gii\generators\model\Generator
validateNewClass() An inline validator that checks if the attribute value refers to a valid namespaced class name. yii\gii\Generator
validateTableName() Validates the $tableName attribute. yii\gii\generators\model\Generator
validateTemplate() Validates the template selection. yii\gii\Generator

Protected Methods

Hide inherited methods

Method Description Defined By
addInverseRelations() Adds inverse relations yii\gii\generators\model\Generator
checkJunctionTable() Checks if the given table is a junction table, that is it has at least one pair of unique foreign keys. yii\gii\generators\model\Generator
extractFieldsFor() Extract nested fields from a fields collection for a given root field Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "id". yii\base\ArrayableTrait
extractRootFields() Extracts the root field names from nested fields. yii\base\ArrayableTrait
generateClassName() Generates a class name from the specified table name. yii\gii\generators\model\Generator
generateClassNameResolution() Returns the class name resolution yii\gii\generators\model\Generator
generateProperties() Generates the properties for the specified table. yii\gii\generators\model\Generator
generateQueryClassName() Generates a query class name from the specified model class name. yii\gii\generators\model\Generator
generateRelationLink() Generates the link parameter to be used in generating the relation declaration. yii\gii\generators\model\Generator
generateRelationName() Generate a relation name for the specified table and a base name. yii\gii\generators\model\Generator
generateRelations() yii\gii\generators\model\Generator
getDbConnection() Returns the database connection as specified by $db. yii\gii\generators\model\Generator
getDbDriverName() Returns the driver name of $db connection. yii\gii\generators\model\Generator
getSchemaNames() yii\gii\generators\model\Generator
getTableNames() yii\gii\generators\model\Generator
isColumnAutoIncremental() Checks if any of the specified columns is auto incremental. yii\gii\generators\model\Generator
isEnum() Checks if column is of ENUM type. yii\gii\generators\model\Generator
isHasManyRelation() Determines if relation is of has many type yii\gii\generators\model\Generator
resolveFields() Determines which fields can be returned by toArray(). yii\base\ArrayableTrait

Events

Hide inherited events

Event Type Description Defined By
EVENT_AFTER_VALIDATE yii\base\Event An event raised at the end of validate() yii\base\Model
EVENT_BEFORE_VALIDATE yii\base\ModelEvent An event raised at the beginning of validate(). yii\base\Model

Constants

Hide inherited constants

Constant Value Description Defined By
JUNCTION_RELATION_VIA_MODEL 'model' yii\gii\generators\model\Generator
JUNCTION_RELATION_VIA_TABLE 'table' yii\gii\generators\model\Generator
RELATIONS_ALL 'all' yii\gii\generators\model\Generator
RELATIONS_ALL_INVERSE 'all-inverse' yii\gii\generators\model\Generator
RELATIONS_NONE 'none' yii\gii\generators\model\Generator
SCENARIO_DEFAULT 'default' The name of the default scenario. yii\base\Model

Property Details

Hide inherited properties

$baseClass public property
public string $baseClass 'yii\db\ActiveRecord'
$classNames protected property
protected string[] $classNames = []
$db public property
public $db 'db'
$generateJunctionRelationMode public property
public $generateJunctionRelationMode self::JUNCTION_RELATION_VIA_TABLE
$generateLabelsFromComments public property
$generateQuery public property
public $generateQuery false
$generateRelationNameFromDestinationTable public property
$generateRelations public property
public $generateRelations self::RELATIONS_ALL
$generateRelationsFromCurrentSchema public property
$modelClass public property
public string $modelClass ''
$ns public property
public $ns 'app\models'
$queryBaseClass public property
public string $queryBaseClass 'yii\db\ActiveQuery'
$queryClass public property
public string|null $queryClass null
$queryNs public property
public $queryNs 'app\models'
$singularize public property
public $singularize false
$standardizeCapitals public property
public $standardizeCapitals false
$tableName public property
public string $tableName ''
$tableNames protected property
protected string[]|null $tableNames null
$tablePrefix public read-only property (available since version 2.0.5)
$useClassConstant public property
public $useClassConstant null
$useSchemaName public property
public $useSchemaName true
$useTablePrefix public property
public $useTablePrefix false

Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\Component::__call()

Calls the named method which is not a class method.

This method will check if any attached behavior has the named method and will execute it if available.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name string

The method name

$params array

Method parameters

return mixed

The method return value

throws yii\base\UnknownMethodException

when calling unknown method

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() public method

Defined in: yii\base\Model::__clone()

This method is called after the object is created by cloning an existing one.

It removes all behaviors because they are attached to the old object.

public void __clone ( )

                public function __clone()
{
    parent::__clone();
    $this->_errors = null;
    $this->_validators = null;
}

            
__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

  • Initializes the object with the given configuration $config.
  • Call init().

If this method is overridden in a child class, it is recommended that

  • the last parameter of the constructor is a configuration array, like $config here.
  • call the parent implementation at the end of the constructor.
public void __construct ( $config = [] )
$config array

Name-value pairs that will be used to initialize the object properties

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

Defined in: yii\base\Component::__get()

Returns the value of a component property.

This method will check in the following order and act accordingly:

  • a property defined by a getter: return the getter result
  • a property of a behavior: return the behavior property value

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $component->property;.

See also __set().

public mixed __get ( $name )
$name string

The property name

return mixed

The property value or the value of a behavior's property

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is write-only.

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\Component::__isset()

Checks if a property is set, i.e. defined and not null.

This method will check in the following order and act accordingly:

  • a property defined by a setter: return whether the property is set
  • a property of a behavior: return whether the property is set
  • return false for non existing properties

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($component->property).

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

The property name or the event name

return boolean

Whether the named property is set

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public method

Defined in: yii\base\Component::__set()

Sets the value of a component property.

This method will check in the following order and act accordingly:

  • a property defined by a setter: set the property value
  • an event in the format of "on xyz": attach the handler to the event "xyz"
  • a behavior in the format of "as xyz": attach the behavior named as "xyz"
  • a property of a behavior: set the behavior property value

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $component->property = $value;.

See also __get().

public void __set ( $name, $value )
$name string

The property name or the event name

$value mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is read-only.

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public method

Defined in: yii\base\Component::__unset()

Sets a component property to be null.

This method will check in the following order and act accordingly:

  • a property defined by a setter: set the property value to be null
  • a property of a behavior: set the property value to be null

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($component->property).

See also https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name string

The property name

throws yii\base\InvalidCallException

if the property is read only.

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
actionGenerateClassName() public method (available since version 2.2.2)

Action to generate class name.

public string actionGenerateClassName ( )

                public function actionGenerateClassName()
{
    return $this->generateClassName($this->tableName);
}

            
activeAttributes() public method

Defined in: yii\base\Model::activeAttributes()

Returns the attribute names that are subject to validation in the current scenario.

public string[] activeAttributes ( )
return string[]

Safe attribute names

                public function activeAttributes()
{
    $scenario = $this->getScenario();
    $scenarios = $this->scenarios();
    if (!isset($scenarios[$scenario])) {
        return [];
    }
    $attributes = array_keys(array_flip($scenarios[$scenario]));
    foreach ($attributes as $i => $attribute) {
        if (strncmp($attribute, '!', 1) === 0) {
            $attributes[$i] = substr($attribute, 1);
        }
    }
    return $attributes;
}

            
addError() public method

Defined in: yii\base\Model::addError()

Adds a new error to the specified attribute.

public void addError ( $attribute, $error '' )
$attribute string

Attribute name

$error string

New error message

                public function addError($attribute, $error = '')
{
    $this->_errors[$attribute][] = $error;
}

            
addErrors() public method (available since version 2.0.2)

Defined in: yii\base\Model::addErrors()

Adds a list of errors.

public void addErrors ( array $items )
$items array

A list of errors. The array keys must be attribute names. The array values should be error messages. If an attribute has multiple errors, these errors must be given in terms of an array. You may use the result of getErrors() as the value for this parameter.

                public function addErrors(array $items)
{
    foreach ($items as $attribute => $errors) {
        if (is_array($errors)) {
            foreach ($errors as $error) {
                $this->addError($attribute, $error);
            }
        } else {
            $this->addError($attribute, $errors);
        }
    }
}

            
addInverseRelations() protected method (available since version 2.0.5)

Adds inverse relations

protected array addInverseRelations ( $relations )
$relations array

Relation declarations

return array

Relation declarations extended with inverse relation names

                protected function addInverseRelations($relations)
{
    $db = $this->getDbConnection();
    $relationNames = [];
    $schemaNames = $this->getSchemaNames();
    foreach ($schemaNames as $schemaName) {
        foreach ($db->schema->getTableSchemas($schemaName) as $table) {
            $className = $this->generateClassName($table->fullName);
            foreach ($table->foreignKeys as $refs) {
                $refTable = $refs[0];
                $refTableSchema = $db->getTableSchema($refTable);
                if ($refTableSchema === null) {
                    // Foreign key could point to non-existing table: https://github.com/yiisoft/yii2-gii/issues/34
                    continue;
                }
                unset($refs[0]);
                $fks = array_keys($refs);
                $leftRelationName = $this->generateRelationName($relationNames, $table, $fks[0], false);
                $relationNames[$table->fullName][$leftRelationName] = true;
                $hasMany = $this->isHasManyRelation($table, $fks);
                $rightRelationName = $this->generateRelationName(
                    $relationNames,
                    $refTableSchema,
                    $className,
                    $hasMany
                );
                $relationNames[$refTableSchema->fullName][$rightRelationName] = true;
                $relations[$table->fullName][$leftRelationName][0] =
                    rtrim($relations[$table->fullName][$leftRelationName][0], ';')
                    . "->inverseOf('".lcfirst($rightRelationName)."');";
                $relations[$refTableSchema->fullName][$rightRelationName][0] =
                    rtrim($relations[$refTableSchema->fullName][$rightRelationName][0], ';')
                    . "->inverseOf('".lcfirst($leftRelationName)."');";
            }
        }
    }
    return $relations;
}

            
afterValidate() public method

Defined in: yii\base\Model::afterValidate()

This method is invoked after validation ends.

The default implementation raises an afterValidate event. You may override this method to do postprocessing after validation. Make sure the parent implementation is invoked so that the event can be raised.

public void afterValidate ( )

                public function afterValidate()
{
    $this->trigger(self::EVENT_AFTER_VALIDATE);
}

            
attachBehavior() public method

Defined in: yii\base\Component::attachBehavior()

Attaches a behavior to this component.

This method will create the behavior object based on the given configuration. After that, the behavior object will be attached to this component by calling the yii\base\Behavior::attach() method.

See also detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

The name of the behavior.

$behavior string|array|yii\base\Behavior

The behavior configuration. This can be one of the following:

return yii\base\Behavior

The behavior object

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public method

Defined in: yii\base\Component::attachBehaviors()

Attaches a list of behaviors to the component.

Each behavior is indexed by its name and should be a yii\base\Behavior object, a string specifying the behavior class, or an configuration array for creating the behavior.

See also attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

List of behaviors to be attached to the component

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
attributeHints() public method (available since version 2.0.4)

Defined in: yii\base\Model::attributeHints()

Returns the attribute hints.

Attribute hints are mainly used for display purpose. For example, given an attribute isPublic, we can declare a hint Whether the post should be visible for not logged in users, which provides user-friendly description of the attribute meaning and can be displayed to end users.

Unlike label hint will not be generated, if its explicit declaration is omitted.

Note, in order to inherit hints defined in the parent class, a child class needs to merge the parent hints with child hints using functions such as array_merge().

public array attributeHints ( )
return array

Attribute hints (name => hint)

                public function attributeHints()
{
    return [];
}

            
attributeLabels() public method

Returns the attribute labels.

Attribute labels are mainly used for display purpose. For example, given an attribute firstName, we can declare a label First Name which is more user-friendly and can be displayed to end users.

By default an attribute label is generated using generateAttributeLabel(). This method allows you to explicitly specify attribute labels.

Note, in order to inherit labels defined in the parent class, a child class needs to merge the parent labels with child labels using functions such as array_merge().

public array attributeLabels ( )
return array

Attribute labels (name => label)

                public function attributeLabels()
{
    return array_merge(parent::attributeLabels(), [
        'ns' => 'Namespace',
        'db' => 'Database Connection ID',
        'tableName' => 'Table Name',
        'standardizeCapitals' => 'Standardize Capitals',
        'singularize' => 'Singularize',
        'modelClass' => 'Model Class Name',
        'baseClass' => 'Base Class',
        'generateRelations' => 'Generate Relations',
        'generateJunctionRelationMode' => 'Generate Junction Relations As',
        'generateRelationsFromCurrentSchema' => 'Generate Relations from Current Schema',
        'generateRelationNameFromDestinationTable' => 'Generate Relation Names Using Target Table Name',
        'useClassConstant' => 'Use `::class`',
        'generateLabelsFromComments' => 'Generate Labels from DB Comments',
        'generateQuery' => 'Generate ActiveQuery',
        'queryNs' => 'ActiveQuery Namespace',
        'queryClass' => 'ActiveQuery Class',
        'queryBaseClass' => 'ActiveQuery Base Class',
        'useSchemaName' => 'Use Schema Name',
    ]);
}

            
attributes() public method

Defined in: yii\base\Model::attributes()

Returns the list of attribute names.

By default, this method returns all public non-static properties of the class. You may override this method to change the default behavior.

public string[] attributes ( )
return string[]

List of attribute names.

                public function attributes()
{
    $class = new ReflectionClass($this);
    $names = [];
    foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
        if (!$property->isStatic()) {
            $names[] = $property->getName();
        }
    }
    return $names;
}

            
autoCompleteData() public method

Returns the list of auto complete values.

The array keys are the attribute names, and the array values are the corresponding auto complete values. Auto complete values can also be callable typed in order one want to make postponed data generation.

public array[] autoCompleteData ( )
return array[]

The list of auto complete values

                public function autoCompleteData()
{
    $db = $this->getDbConnection();
    if ($db !== null) {
        return [
            'tableName' => function () use ($db) {
                return $db->getSchema()->getTableNames();
            },
        ];
    }
    return [];
}

            
beforeValidate() public method

Defined in: yii\base\Model::beforeValidate()

This method is invoked before validation starts.

The default implementation raises a beforeValidate event. You may override this method to do preliminary checks before validation. Make sure the parent implementation is invoked so that the event can be raised.

public boolean beforeValidate ( )
return boolean

Whether the validation should be executed. Defaults to true. If false is returned, the validation will stop and the model is considered invalid.

                public function beforeValidate()
{
    $event = new ModelEvent();
    $this->trigger(self::EVENT_BEFORE_VALIDATE, $event);
    return $event->isValid;
}

            
behaviors() public method

Defined in: yii\base\Component::behaviors()

Returns a list of behaviors that this component should behave as.

Child classes may override this method to specify the behaviors they want to behave as.

The return value of this method should be an array of behavior objects or configurations indexed by behavior names. A behavior configuration can be either a string specifying the behavior class or an array of the following structure:

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

Note that a behavior class must extend from yii\base\Behavior. Behaviors can be attached using a name or anonymously. When a name is used as the array key, using this name, the behavior can later be retrieved using getBehavior() or be detached using detachBehavior(). Anonymous behaviors can not be retrieved or detached.

Behaviors declared in this method will be attached to the component automatically (on demand).

public array behaviors ( )
return array

The behavior configurations.

                public function behaviors()
{
    return [];
}

            
canGetProperty() public method

Defined in: yii\base\Component::canGetProperty()

Returns a value indicating whether a property can be read.

A property can be read if:

  • the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a readable property of the given name (when $checkBehaviors is true).

See also canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property can be read

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public method

Defined in: yii\base\Component::canSetProperty()

Returns a value indicating whether a property can be set.

A property can be written if:

  • the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a writable property of the given name (when $checkBehaviors is true).

See also canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property can be written

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
checkJunctionTable() protected method

Checks if the given table is a junction table, that is it has at least one pair of unique foreign keys.

protected array|boolean checkJunctionTable ( $table )
$table
return array|boolean

All unique foreign key pairs if the table is a junction table, or false if the table is not a junction table.

                protected function checkJunctionTable($table)
{
    if (count($table->foreignKeys) < 2) {
        return false;
    }
    $uniqueKeys = [$table->primaryKey];
    try {
        $uniqueKeys = array_merge($uniqueKeys, $this->getDbConnection()->getSchema()->findUniqueIndexes($table));
    } catch (NotSupportedException $e) {
        // ignore
    }
    $result = [];
    // find all foreign key pairs that have all columns in an unique constraint
    $foreignKeyNames = array_keys($table->foreignKeys);
    $foreignKeys = array_values($table->foreignKeys);
    $foreignKeysCount = count($foreignKeys);
    for ($i = 0; $i < $foreignKeysCount; $i++) {
        $firstColumns = $foreignKeys[$i];
        unset($firstColumns[0]);
        for ($j = $i + 1; $j < $foreignKeysCount; $j++) {
            $secondColumns = $foreignKeys[$j];
            unset($secondColumns[0]);
            $fks = array_merge(array_keys($firstColumns), array_keys($secondColumns));
            foreach ($uniqueKeys as $uniqueKey) {
                if (count(array_diff(array_merge($uniqueKey, $fks), array_intersect($uniqueKey, $fks))) === 0) {
                    // save the foreign key pair
                    $result[] = [
                        [
                            $foreignKeys[$i],
                            $table->fullName . '.' . $foreignKeyNames[$i]
                        ],
                        [
                            $foreignKeys[$j],
                            $table->fullName . '.' . $foreignKeyNames[$j]
                        ]
                    ];
                    break;
                }
            }
        }
    }
    return empty($result) ? false : $result;
}

            
className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use ::class instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return string

The fully qualified name of this class.

                public static function className()
{
    return get_called_class();
}

            
clearErrors() public method

Defined in: yii\base\Model::clearErrors()

Removes errors for all attributes or a single attribute.

public void clearErrors ( $attribute null )
$attribute string|null

Attribute name. Use null to remove errors for all attributes.

                public function clearErrors($attribute = null)
{
    if ($attribute === null) {
        $this->_errors = [];
    } else {
        unset($this->_errors[$attribute]);
    }
}

            
createValidators() public method

Defined in: yii\base\Model::createValidators()

Creates validator objects based on the validation rules specified in rules().

Unlike getValidators(), each time this method is called, a new list of validators will be returned.

public ArrayObject createValidators ( )
return ArrayObject

Validators

throws yii\base\InvalidConfigException

if any validation rule configuration is invalid

                public function createValidators()
{
    $validators = new ArrayObject();
    foreach ($this->rules() as $rule) {
        if ($rule instanceof Validator) {
            $validators->append($rule);
        } elseif (is_array($rule) && isset($rule[0], $rule[1])) { // attributes, validator type
            $validator = Validator::createValidator($rule[1], $this, (array) $rule[0], array_slice($rule, 2));
            $validators->append($validator);
        } else {
            throw new InvalidConfigException('Invalid validation rule: a rule must specify both attribute names and validator type.');
        }
    }
    return $validators;
}

            
defaultTemplate() public method

Defined in: yii\gii\Generator::defaultTemplate()

Returns the root path to the default code template files.

The default implementation will return the "templates" subdirectory of the directory containing the generator class file.

public string defaultTemplate ( )
return string

The root path to the default code template files.

                public function defaultTemplate()
{
    $class = new ReflectionClass($this);
    return dirname($class->getFileName()) . '/default';
}

            
detachBehavior() public method

Defined in: yii\base\Component::detachBehavior()

Detaches a behavior from the component.

The behavior's yii\base\Behavior::detach() method will be invoked.

public yii\base\Behavior|null detachBehavior ( $name )
$name string

The behavior's name.

return yii\base\Behavior|null

The detached behavior. Null if the behavior does not exist.

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public method

Defined in: yii\base\Component::detachBehaviors()

Detaches all behaviors from the component.

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public method

Defined in: yii\base\Component::ensureBehaviors()

Makes sure that the behaviors declared in behaviors() are attached to this component.

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
extraFields() public method

Defined in: yii\base\ArrayableTrait::extraFields()

Returns the list of fields that can be expanded further and returned by toArray().

This method is similar to fields() except that the list of fields returned by this method are not returned by default by toArray(). Only when field names to be expanded are explicitly specified when calling toArray(), will their values be exported.

The default implementation returns an empty array.

You may override this method to return a list of expandable fields based on some context information (e.g. the current application user).

See also:

public array extraFields ( )
return array

The list of expandable field names or field definitions. Please refer to fields() on the format of the return value.

                public function extraFields()
{
    return [];
}

            
extractFieldsFor() protected method (available since version 2.0.14)

Defined in: yii\base\ArrayableTrait::extractFieldsFor()

Extract nested fields from a fields collection for a given root field Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "id".

protected array extractFieldsFor ( array $fields, $rootField )
$fields array

The fields requested for extraction

$rootField string

The root field for which we want to extract the nested fields

return array

Nested fields extracted for the given field

                protected function extractFieldsFor(array $fields, $rootField)
{
    $result = [];
    foreach ($fields as $field) {
        if (0 === strpos($field, "{$rootField}.")) {
            $result[] = preg_replace('/^' . preg_quote($rootField, '/') . '\./i', '', $field);
        }
    }
    return array_unique($result);
}

            
extractRootFields() protected method (available since version 2.0.14)

Defined in: yii\base\ArrayableTrait::extractRootFields()

Extracts the root field names from nested fields.

Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "item".

protected array extractRootFields ( array $fields )
$fields array

The fields requested for extraction

return array

Root fields extracted from the given nested fields

                protected function extractRootFields(array $fields)
{
    $result = [];
    foreach ($fields as $field) {
        $result[] = current(explode('.', $field, 2));
    }
    if (in_array('*', $result, true)) {
        $result = [];
    }
    return array_unique($result);
}

            
fields() public method

Defined in: yii\base\ArrayableTrait::fields()

Returns the list of fields that should be returned by default by toArray() when no specific fields are specified.

A field is a named element in the returned array by toArray().

This method should return an array of field names or field definitions. If the former, the field name will be treated as an object property name whose value will be used as the field value. If the latter, the array key should be the field name while the array value should be the corresponding field definition which can be either an object property name or a PHP callable returning the corresponding field value. The signature of the callable should be:

function ($model, $field) {
    // return field value
}

For example, the following code declares four fields:

  • email: the field name is the same as the property name email;
  • firstName and lastName: the field names are firstName and lastName, and their values are obtained from the first_name and last_name properties;
  • fullName: the field name is fullName. Its value is obtained by concatenating first_name and last_name.
return [
    'email',
    'firstName' => 'first_name',
    'lastName' => 'last_name',
    'fullName' => function () {
        return $this->first_name . ' ' . $this->last_name;
    },
];

In this method, you may also want to return different lists of fields based on some context information. For example, depending on the privilege of the current application user, you may return different sets of visible fields or filter out some fields.

The default implementation of this method returns the public object member variables indexed by themselves.

See also toArray().

public array fields ( )
return array

The list of field names or field definitions.

                public function fields()
{
    $fields = array_keys(Yii::getObjectVars($this));
    return array_combine($fields, $fields);
}

            
formName() public method

Defined in: yii\base\Model::formName()

Returns the form name that this model class should use.

The form name is mainly used by yii\widgets\ActiveForm to determine how to name the input fields for the attributes in a model. If the form name is "A" and an attribute name is "b", then the corresponding input name would be "A[b]". If the form name is an empty string, then the input name would be "b".

The purpose of the above naming schema is that for forms which contain multiple different models, the attributes of each model are grouped in sub-arrays of the POST-data and it is easier to differentiate between them.

By default, this method returns the model class name (without the namespace part) as the form name. You may override it when the model is used in different forms.

See also load().

public string formName ( )
return string

The form name of this model class.

throws yii\base\InvalidConfigException

when form is defined with anonymous class and formName() method is not overridden.

                public function formName()
{
    $reflector = new ReflectionClass($this);
    if (PHP_VERSION_ID >= 70000 && $reflector->isAnonymous()) {
        throw new InvalidConfigException('The "formName()" method should be explicitly defined for anonymous models');
    }
    return $reflector->getShortName();
}

            
formView() public method

Defined in: yii\gii\Generator::formView()

Returns the view file for the input form of the generator.

The default implementation will return the "form.php" file under the directory that contains the generator class file.

public string formView ( )
return string

The view file for the input form of the generator.

                public function formView()
{
    $class = new ReflectionClass($this);
    return dirname($class->getFileName()) . '/form.php';
}

            
generate() public method

Generates the code based on the current user input and the specified code template files.

Please refer to yii\gii\generators\controller\Generator::generate() as an example on how to implement this method.

public yii\gii\CodeFile[] generate ( )
return yii\gii\CodeFile[]

A list of code files to be created.

                public function generate()
{
    $files = [];
    $relations = $this->generateRelations();
    $db = $this->getDbConnection();
    foreach ($this->getTableNames() as $tableName) {
        // model:
        $modelClassName = $this->generateClassName($tableName);
        $queryClassName = $this->generateQuery ? $this->generateQueryClassName($modelClassName) : false;
        $tableRelations = isset($relations[$tableName]) ? $relations[$tableName] : [];
        $tableSchema = $db->getTableSchema($tableName);
        $params = [
            'tableName' => $tableName,
            'className' => $modelClassName,
            'queryClassName' => $queryClassName,
            'tableSchema' => $tableSchema,
            'properties' => $this->generateProperties($tableSchema),
            'labels' => $this->generateLabels($tableSchema),
            'rules' => $this->generateRules($tableSchema),
            'relations' => $tableRelations,
            'relationsClassHints' => $this->generateRelationsClassHints($tableRelations, $this->generateQuery),
            'enum' => $this->getEnum($tableSchema->columns),
        ];
        $files[] = new CodeFile(
            Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/' . $modelClassName . '.php',
            $this->render('model.php', $params)
        );
        // query:
        if ($queryClassName) {
            $params['className'] = $queryClassName;
            $params['modelClassName'] = $modelClassName;
            $files[] = new CodeFile(
                Yii::getAlias('@' . str_replace('\\', '/', $this->queryNs)) . '/' . $queryClassName . '.php',
                $this->render('query.php', $params)
            );
        }
    }
    return $files;
}

            
generateAttributeLabel() public method

Defined in: yii\base\Model::generateAttributeLabel()

Generates a user friendly attribute label based on the give attribute name.

This is done by replacing underscores, dashes and dots with blanks and changing the first letter of each word to upper case. For example, 'department_name' or 'DepartmentName' will generate 'Department Name'.

public string generateAttributeLabel ( $name )
$name string

The column name

return string

The attribute label

                public function generateAttributeLabel($name)
{
    return Inflector::camel2words($name, true);
}

            
generateClassName() protected method

Generates a class name from the specified table name.

protected string generateClassName ( $tableName, $useSchemaName null )
$tableName string

The table name (which may contain schema prefix)

$useSchemaName boolean

Should schema name be included in the class name, if present

return string

The generated class name

                protected function generateClassName($tableName, $useSchemaName = null)
{
    if (!empty($this->classNames[$tableName])) {
        return $this->classNames[$tableName];
    }
    $schemaName = '';
    $fullTableName = $tableName;
    if (($pos = strrpos($tableName, '.')) !== false) {
        if (($useSchemaName === null && $this->useSchemaName) || $useSchemaName) {
            $schemaName = substr($tableName, 0, $pos) . '_';
        }
        $tableName = substr($tableName, $pos + 1);
    }
    $db = $this->getDbConnection();
    $patterns = [];
    $patterns[] = "/^{$db->tablePrefix}(.*?)$/";
    $patterns[] = "/^(.*?){$db->tablePrefix}$/";
    if (strpos($this->tableName, '*') !== false) {
        $pattern = $this->tableName;
        if (($pos = strrpos($pattern, '.')) !== false) {
            $pattern = substr($pattern, $pos + 1);
        }
        $patterns[] = '/^' . str_replace('*', '(\w+)', $pattern) . '$/';
    }
    $className = $tableName;
    foreach ($patterns as $pattern) {
        if (preg_match($pattern, $tableName, $matches)) {
            $className = $matches[1];
            break;
        }
    }
    if ($this->standardizeCapitals) {
        $schemaName = ctype_upper(preg_replace('/[_-]/', '', $schemaName)) ? strtolower($schemaName) : $schemaName;
        $className = ctype_upper(preg_replace('/[_-]/', '', $className)) ? strtolower($className) : $className;
        $this->classNames[$fullTableName] = Inflector::camelize(Inflector::camel2words($schemaName.$className));
    } else {
        $this->classNames[$fullTableName] = Inflector::id2camel($schemaName.$className, '_');
    }
    if ($this->singularize) {
        $this->classNames[$fullTableName] = Inflector::singularize($this->classNames[$fullTableName]);
    }
    return $this->classNames[$fullTableName];
}

            
generateClassNameResolution() protected method (available since version 2.2.5)

Returns the class name resolution

protected string generateClassNameResolution ( $class )
$class string

                protected function generateClassNameResolution($class)
{
    return $class . '::class' . ($this->useClassConstant ? '' : 'Name()');
}

            
generateLabels() public method

Generates the attribute labels for the specified table.

public array generateLabels ( $table )
$table yii\db\TableSchema

The table schema

return array

The generated attribute labels (name => label)

                public function generateLabels($table)
{
    $labels = [];
    foreach ($table->columns as $column) {
        if ($this->generateLabelsFromComments && !empty($column->comment)) {
            $labels[$column->name] = $column->comment;
        } elseif (!strcasecmp($column->name, 'id')) {
            $labels[$column->name] = 'ID';
        } else {
            $label = Inflector::camel2words($column->name);
            if (!empty($label) && substr_compare($label, ' id', -3, 3, true) === 0) {
                $label = substr($label, 0, -3) . ' ID';
            }
            $labels[$column->name] = $label;
        }
    }
    return $labels;
}

            
generateProperties() protected method (available since version 2.0.6)

Generates the properties for the specified table.

protected array generateProperties ( $table )
$table yii\db\TableSchema

The table schema

return array

The generated properties (property => type)

                protected function generateProperties($table)
{
    $properties = [];
    foreach ($table->columns as $column) {
        switch ($column->type) {
            case Schema::TYPE_SMALLINT:
            case Schema::TYPE_INTEGER:
            case Schema::TYPE_BIGINT:
            case Schema::TYPE_TINYINT:
                $type = 'int';
                break;
            case Schema::TYPE_BOOLEAN:
                $type = 'bool';
                break;
            case Schema::TYPE_FLOAT:
            case Schema::TYPE_DOUBLE:
            case Schema::TYPE_DECIMAL:
            case Schema::TYPE_MONEY:
                $type = 'float';
                break;
            case Schema::TYPE_DATE:
            case Schema::TYPE_TIME:
            case Schema::TYPE_DATETIME:
            case Schema::TYPE_TIMESTAMP:
            case Schema::TYPE_JSON:
                $type = 'string';
                break;
            default:
                $type = $column->phpType;
        }
        if ($column->allowNull){
            $type .= '|null';
        }
        $properties[$column->name] = [
            'type' => $type,
            'name' => $column->name,
            'comment' => $column->comment,
        ];
    }
    return $properties;
}

            
generateQueryClassName() protected method

Generates a query class name from the specified model class name.

protected string generateQueryClassName ( $modelClassName )
$modelClassName string

Model class name

return string

Generated class name

                protected function generateQueryClassName($modelClassName)
{
    $queryClassName = $this->queryClass;
    if (empty($queryClassName) || strpos($this->tableName, '*') !== false) {
        $queryClassName = $modelClassName . 'Query';
    }
    return $queryClassName;
}

            
generateRelationLink() protected method

Generates the link parameter to be used in generating the relation declaration.

protected string generateRelationLink ( $refs )
$refs array

Reference constraint

return string

The generated link parameter.

generateRelationName() protected method

Generate a relation name for the specified table and a base name.

protected string generateRelationName ( $relations, $table, $key, $multiple )
$relations array

The relations being generated currently.

$table yii\db\TableSchema

The table schema

$key string

A base name that the relation name may be generated from

$multiple boolean

Whether this is a has-many relation

return string

The relation name

                protected function generateRelationName($relations, $table, $key, $multiple)
{
    static $baseModel;
    /* @var $baseModel \yii\db\ActiveRecord */
    if ($baseModel === null) {
        $baseClass = $this->baseClass;
        $baseClassReflector = new \ReflectionClass($baseClass);
        if ($baseClassReflector->isAbstract()) {
            $baseClassWrapper =
                'namespace ' . __NAMESPACE__ . ';'.
                'class GiiBaseClassWrapper extends \\' . $baseClass . ' {' .
                    'public static function tableName(){' .
                        'return "' . addslashes($table->fullName) . '";' .
                    '}' .
                '};' .
                'return new GiiBaseClassWrapper();';
            $baseModel = eval($baseClassWrapper);
        } else {
            $baseModel = new $baseClass();
        }
        $baseModel->setAttributes([]);
    }
    if (!empty($key) && strcasecmp($key, 'id')) {
        if (substr_compare($key, 'id', -2, 2, true) === 0) {
            $key = rtrim(substr($key, 0, -2), '_');
        } elseif (substr_compare($key, 'id_', 0, 3, true) === 0) {
            $key = ltrim(substr($key, 3, strlen($key)), '_');
        }
    }
    if ($multiple) {
        $key = Inflector::pluralize($key);
    }
    $name = $rawName = Inflector::id2camel($key, '_');
    $i = 0;
    while ($baseModel->hasProperty(lcfirst($name))) {
        $name = $rawName . ($i++);
    }
    while (isset($table->columns[lcfirst($name)])) {
        $name = $rawName . ($i++);
    }
    while (isset($relations[$table->fullName][$name])) {
        $name = $rawName . ($i++);
    }
    return $name;
}

            
generateRelations() protected method

protected array generateRelations ( )
return array

The generated relation declarations

                protected function generateRelations()
{
    if ($this->generateRelations === self::RELATIONS_NONE) {
        return [];
    }
    $db = $this->getDbConnection();
    $relations = [];
    $schemaNames = $this->getSchemaNames();
    foreach ($schemaNames as $schemaName) {
        foreach ($db->getSchema()->getTableSchemas($schemaName) as $table) {
            $className = $this->generateClassName($table->fullName);
            $classNameResolution = $this->generateClassNameResolution($className);
            foreach ($table->foreignKeys as $foreignKey => $refs) {
                $refTable = $refs[0];
                $refTableSchema = $db->getTableSchema($refTable);
                if ($refTableSchema === null) {
                    // Foreign key could point to non-existing table: https://github.com/yiisoft/yii2-gii/issues/34
                    continue;
                }
                unset($refs[0]);
                $fks = array_keys($refs);
                $relName = $this->generateRelationNameFromDestinationTable ? $refTable : $fks[0];
                $refClassName = $this->generateClassName($refTable);
                $refClassNameResolution = $this->generateClassNameResolution($refClassName);
                // Add relation for this table
                $link = $this->generateRelationLink(array_flip($refs));
                $relationName = $this->generateRelationName($relations, $table, $relName, false);
                $relations[$table->fullName][$relationName] = [
                    "return \$this->hasOne($refClassNameResolution, $link);",
                    $refClassName,
                    false,
                    $table->fullName . '.' . $foreignKey
                ];
                // Add relation for the referenced table
                $hasMany = $this->isHasManyRelation($table, $fks);
                $link = $this->generateRelationLink($refs);
                $relationName = $this->generateRelationName($relations, $refTableSchema, $className, $hasMany);
                $relations[$refTableSchema->fullName][$relationName] = [
                    "return \$this->" . ($hasMany ? 'hasMany' : 'hasOne') . "($classNameResolution, $link);",
                    $className,
                    $hasMany,
                    $table->fullName . '.' . $foreignKey
                ];
            }
        }
        foreach ($db->getSchema()->getTableSchemas($schemaName) as $table) {
            if (($junctionFks = $this->checkJunctionTable($table)) === false) {
                continue;
            }
            $relations = $this->generateManyManyRelations($table, $junctionFks, $relations);
        }
    }
    if ($this->generateRelations === self::RELATIONS_ALL_INVERSE) {
        $relations =  $this->addInverseRelations($relations);
    }
    foreach ($relations as &$relation) {
        ksort($relation);
    }
    return $relations;
}

            
generateRelationsClassHints() public method (available since version 2.1.4)

Generates the relation class hints for the relation methods

public array generateRelationsClassHints ( $relations, $generateQuery )
$relations array

The relation array for single table

$generateQuery boolean

Generates ActiveQuery class (for ActiveQuery namespace available)

                public function generateRelationsClassHints($relations, $generateQuery){
    $result = [];
    foreach ($relations as $name => $relation){
        // The queryNs options available if generateQuery is active
        if ($generateQuery) {
            $queryClassRealName = '\\' . $this->queryNs . '\\' . $relation[1];
            if (class_exists($queryClassRealName, true) && is_subclass_of($queryClassRealName, '\yii\db\BaseActiveRecord')) {
                /** @var \yii\db\ActiveQuery $activeQuery */
                $activeQuery = $queryClassRealName::find();
                $activeQueryClass = $activeQuery::className();
                if (strpos($activeQueryClass, $this->ns) === 0){
                    $activeQueryClass = StringHelper::basename($activeQueryClass);
                }
                $result[$name] = '\yii\db\ActiveQuery|' . $activeQueryClass;
            } else {
                $result[$name] = '\yii\db\ActiveQuery|' . (($this->ns === $this->queryNs) ? $relation[1]: '\\' . $this->queryNs . '\\' . $relation[1]) . 'Query';
            }
        } else {
            $result[$name] = '\yii\db\ActiveQuery';
        }
    }
    return $result;
}

            
generateRules() public method

Generates validation rules for the specified table.

public array generateRules ( $table )
$table yii\db\TableSchema

The table schema

return array

The generated validation rules

                public function generateRules($table)
{
    $types = [];
    $lengths = [];
    $nullable = [];
    $defaultValues = [];
    foreach ($table->columns as $column) {
        if ($column->autoIncrement) {
            continue;
        }
        if (!$column->allowNull && $column->defaultValue === null) {
            $types['required'][] = $column->name;
        } elseif ($column->allowNull && $column->defaultValue === null) {
            $nullable[] = $column->name;
        } elseif (is_scalar($column->defaultValue)) {
            if (array_key_exists($column->defaultValue, $defaultValues)) {
                $defaultValues[$column->defaultValue] = [];
            }
            $defaultValues[$column->defaultValue][] = $column->name;
        }
        switch ($column->type) {
            case Schema::TYPE_SMALLINT:
            case Schema::TYPE_INTEGER:
            case Schema::TYPE_BIGINT:
            case Schema::TYPE_TINYINT:
                $types['integer'][] = $column->name;
                break;
            case Schema::TYPE_BOOLEAN:
                $types['boolean'][] = $column->name;
                break;
            case Schema::TYPE_FLOAT:
            case Schema::TYPE_DOUBLE:
            case Schema::TYPE_DECIMAL:
            case Schema::TYPE_MONEY:
                $types['number'][] = $column->name;
                break;
            case Schema::TYPE_DATE:
            case Schema::TYPE_TIME:
            case Schema::TYPE_DATETIME:
            case Schema::TYPE_TIMESTAMP:
            case Schema::TYPE_JSON:
                $types['safe'][] = $column->name;
                break;
            default: // strings
                if ($column->size > 0) {
                    $lengths[$column->size][] = $column->name;
                } else {
                    $types['string'][] = $column->name;
                }
        }
    }
    $rules = [];
    if (!empty($nullable)) {
        $rules[] = "[['" . implode("', '", $nullable) . "'], 'default', 'value' => null]";
    }
    if (!empty($defaultValues)) {
        foreach ($defaultValues as $defaultValue => $defaultValueColumns) {
            $defaultValue = is_numeric($defaultValue) ? $defaultValue : "'$defaultValue'";
            $rules[] = "[['" . implode("', '", $defaultValueColumns) . "'], 'default', 'value' => $defaultValue]";
        }
    }
    $driverName = $this->getDbDriverName();
    foreach ($types as $type => $columns) {
        if ($driverName === 'pgsql' && $type === 'integer') {
            $rules[] = "[['" . implode("', '", $columns) . "'], 'default', 'value' => null]";
        }
        $rules[] = "[['" . implode("', '", $columns) . "'], '$type']";
    }
    foreach ($lengths as $length => $columns) {
        $rules[] = "[['" . implode("', '", $columns) . "'], 'string', 'max' => $length]";
    }
    $columnsEnum = $this->getEnum($table->columns);
    foreach ($columnsEnum as $fieldName => $columnEnum) {
        $rules['enum-' . $fieldName] = "['" . $fieldName . "', 'in', 'range' => array_keys(self::" . $columnEnum['funcOptsName'] . '())]';
    }
    $db = $this->getDbConnection();
    // Unique indexes rules
    try {
        $uniqueIndexes = array_merge($db->getSchema()->findUniqueIndexes($table), [$table->primaryKey]);
        $uniqueIndexes = array_unique($uniqueIndexes, SORT_REGULAR);
        foreach ($uniqueIndexes as $uniqueColumns) {
            // Avoid validating auto incremental columns
            if (!$this->isColumnAutoIncremental($table, $uniqueColumns)) {
                $attributesCount = count($uniqueColumns);
                if ($attributesCount === 1) {
                    $rules[] = "[['" . $uniqueColumns[0] . "'], 'unique']";
                } elseif ($attributesCount > 1) {
                    $columnsList = implode("', '", $uniqueColumns);
                    $rules[] = "[['$columnsList'], 'unique', 'targetAttribute' => ['$columnsList']]";
                }
            }
        }
    } catch (NotSupportedException $e) {
        // doesn't support unique indexes information...do nothing
    }
    // Exist rules for foreign keys
    foreach ($table->foreignKeys as $refs) {
        $refTable = $refs[0];
        $refTableSchema = $db->getTableSchema($refTable);
        if ($refTableSchema === null) {
            // Foreign key could point to non-existing table: https://github.com/yiisoft/yii2-gii/issues/34
            continue;
        }
        $refClassName = $this->generateClassName($refTable);
        $refClassNameResolution = $this->generateClassNameResolution($refClassName);
        unset($refs[0]);
        $attributes = implode("', '", array_keys($refs));
        $targetAttributes = [];
        foreach ($refs as $key => $value) {
            $targetAttributes[] = "'$key' => '$value'";
        }
        $targetAttributes = implode(', ', $targetAttributes);
        $rules[] = "[['$attributes'], 'exist', 'skipOnError' => true, 'targetClass' => $refClassNameResolution, 'targetAttribute' => [$targetAttributes]]";
    }
    return $rules;
}

            
generateString() public method

Defined in: yii\gii\Generator::generateString()

Generates a string depending on the $enableI18N property

public string generateString ( $string '', $placeholders = [] )
$string string

The text be generated

$placeholders array

The placeholders to use by Yii::t()

                public function generateString($string = '', $placeholders = [])
{
    $string = addslashes($string);
    if ($this->enableI18N) {
        // If there are placeholders, use them
        if (!empty($placeholders)) {
            $ph = ', ' . VarDumper::export($placeholders);
        } else {
            $ph = '';
        }
        $str = "Yii::t('" . $this->messageCategory . "', '" . $string . "'" . $ph . ")";
    } else {
        // No I18N, replace placeholders by real words, if any
        if (!empty($placeholders)) {
            $phKeys = array_map(function($word) {
                return '{' . $word . '}';
            }, array_keys($placeholders));
            $phValues = array_values($placeholders);
            $str = "'" . str_replace($phKeys, $phValues, $string) . "'";
        } else {
            // No placeholders, just the given string
            $str = "'" . $string . "'";
        }
    }
    return $str;
}

            
generateTableName() public method

Generates the table name by considering table prefix.

If $useTablePrefix is false, the table name will be returned without change.

public string generateTableName ( $tableName )
$tableName string

The table name (which may contain schema prefix)

return string

The generated table name

                public function generateTableName($tableName)
{
    if (!$this->useTablePrefix) {
        return $tableName;
    }
    $db = $this->getDbConnection();
    if (preg_match("/^{$db->tablePrefix}(.*?)$/", $tableName, $matches)) {
        $tableName = '{{%' . $matches[1] . '}}';
    } elseif (preg_match("/^(.*?){$db->tablePrefix}$/", $tableName, $matches)) {
        $tableName = '{{' . $matches[1] . '%}}';
    }
    return $tableName;
}

            
getActiveValidators() public method

Defined in: yii\base\Model::getActiveValidators()

Returns the validators applicable to the current $scenario.

public yii\validators\Validator[] getActiveValidators ( $attribute null )
$attribute string|null

The name of the attribute whose applicable validators should be returned. If this is null, the validators for ALL attributes in the model will be returned.

return yii\validators\Validator[]

The validators applicable to the current $scenario.

                public function getActiveValidators($attribute = null)
{
    $activeAttributes = $this->activeAttributes();
    if ($attribute !== null && !in_array($attribute, $activeAttributes, true)) {
        return [];
    }
    $scenario = $this->getScenario();
    $validators = [];
    foreach ($this->getValidators() as $validator) {
        if ($attribute === null) {
            $validatorAttributes = $validator->getValidationAttributes($activeAttributes);
            $attributeValid = !empty($validatorAttributes);
        } else {
            $attributeValid = in_array($attribute, $validator->getValidationAttributes($attribute), true);
        }
        if ($attributeValid && $validator->isActive($scenario)) {
            $validators[] = $validator;
        }
    }
    return $validators;
}

            
getAttributeHint() public method (available since version 2.0.4)

Defined in: yii\base\Model::getAttributeHint()

Returns the text hint for the specified attribute.

See also attributeHints().

public string getAttributeHint ( $attribute )
$attribute string

The attribute name

return string

The attribute hint

                public function getAttributeHint($attribute)
{
    $hints = $this->attributeHints();
    return isset($hints[$attribute]) ? $hints[$attribute] : '';
}

            
getAttributeLabel() public method

Defined in: yii\base\Model::getAttributeLabel()

Returns the text label for the specified attribute.

See also:

public string getAttributeLabel ( $attribute )
$attribute string

The attribute name

return string

The attribute label

                public function getAttributeLabel($attribute)
{
    $labels = $this->attributeLabels();
    return isset($labels[$attribute]) ? $labels[$attribute] : $this->generateAttributeLabel($attribute);
}

            
getAttributes() public method

Defined in: yii\base\Model::getAttributes()

Returns attribute values.

public array getAttributes ( $names null, $except = [] )
$names array|null

List of attributes whose value needs to be returned. Defaults to null, meaning all attributes listed in attributes() will be returned. If it is an array, only the attributes in the array will be returned.

$except array

List of attributes whose value should NOT be returned.

return array

Attribute values (name => value).

                public function getAttributes($names = null, $except = [])
{
    $values = [];
    if ($names === null) {
        $names = $this->attributes();
    }
    foreach ($names as $name) {
        $values[$name] = $this->$name;
    }
    foreach ($except as $name) {
        unset($values[$name]);
    }
    return $values;
}

            
getBehavior() public method

Defined in: yii\base\Component::getBehavior()

Returns the named behavior object.

public yii\base\Behavior|null getBehavior ( $name )
$name string

The behavior name

return yii\base\Behavior|null

The behavior object, or null if the behavior does not exist

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public method

Defined in: yii\base\Component::getBehaviors()

Returns all behaviors attached to this component.

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

List of behaviors attached to this component

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getDbConnection() protected method

Returns the database connection as specified by $db.

protected yii\db\Connection|null getDbConnection ( )
return yii\db\Connection|null

Database connection instance

                protected function getDbConnection()
{
    return Yii::$app->get($this->db, false);
}

            
getDbDriverName() protected method (available since version 2.0.6)

Returns the driver name of $db connection.

protected string|null getDbDriverName ( )
return string|null

Driver name of db connection.

                protected function getDbDriverName()
{
    $db = $this->getDbConnection();
    return $db instanceof Connection ? $db->driverName : null;
}

            
getDescription() public method

Returns the detailed description of the generator.

public string getDescription ( )

                public function getDescription()
{
    return 'This generator generates an ActiveRecord class for the specified database table.';
}

            
getEnum() public method

Prepares ENUM field values.

public array getEnum ( $columns )
$columns yii\db\ColumnSchema[]

                public function getEnum($columns)
{
    $enum = [];
    foreach ($columns as $column) {
        if (!$this->isEnum($column)) {
            continue;
        }
        $columnCamelName = Inflector::id2camel($column->name, '_');
        $enum[$column->name]['funcOptsName'] = 'opts' . $columnCamelName;
        $enum[$column->name]['isFunctionPrefix'] = 'is' . $columnCamelName;
        $enum[$column->name]['setFunctionPrefix'] = 'set' . $columnCamelName . 'To';
        $enum[$column->name]['displayFunctionPrefix'] = 'display' . $columnCamelName;
        $enum[$column->name]['columnName'] = $column->name;
        $enum[$column->name]['values'] = [];
        foreach ($column->enumValues as $value) {
            $constantName = strtoupper(Inflector::slug($column->name . ' ' . $value, '_'));
            $label = Inflector::camel2words($value);
            $enum[$column->name]['values'][] = [
                'value' => $value,
                'constName' => $constantName,
                'label' => $label,
                'functionSuffix' => Inflector::id2camel(Inflector::slug($value))
            ];
        }
    }
    return $enum;
}

            
getErrorSummary() public method (available since version 2.0.14)

Defined in: yii\base\Model::getErrorSummary()

Returns the errors for all attributes as a one-dimensional array.

See also:

public array getErrorSummary ( $showAllErrors )
$showAllErrors boolean

Boolean, if set to true every error message for each attribute will be shown otherwise only the first error message for each attribute will be shown.

return array

Errors for all attributes as a one-dimensional array. Empty array is returned if no error.

                public function getErrorSummary($showAllErrors)
{
    $lines = [];
    $errors = $showAllErrors ? $this->getErrors() : $this->getFirstErrors();
    foreach ($errors as $es) {
        $lines = array_merge($lines, (array)$es);
    }
    return $lines;
}

            
getErrors() public method

Defined in: yii\base\Model::getErrors()

Returns the errors for all attributes or a single attribute.

See also:

public array getErrors ( $attribute null )
$attribute string|null

Attribute name. Use null to retrieve errors for all attributes.

return array

Errors for all attributes or the specified attribute. Empty array is returned if no error. See getErrors() for detailed description. Note that when returning errors for all attributes, the result is a two-dimensional array, like the following:

[
    'username' => [
        'Username is required.',
        'Username must contain only word characters.',
    ],
    'email' => [
        'Email address is invalid.',
    ]
]

                public function getErrors($attribute = null)
{
    if ($attribute === null) {
        return $this->_errors === null ? [] : $this->_errors;
    }
    return isset($this->_errors[$attribute]) ? $this->_errors[$attribute] : [];
}

            
getFirstError() public method

Defined in: yii\base\Model::getFirstError()

Returns the first error of the specified attribute.

See also:

public string|null getFirstError ( $attribute )
$attribute string

Attribute name.

return string|null

The error message. Null is returned if no error.

                public function getFirstError($attribute)
{
    return isset($this->_errors[$attribute]) ? reset($this->_errors[$attribute]) : null;
}

            
getFirstErrors() public method

Defined in: yii\base\Model::getFirstErrors()

Returns the first error of every attribute in the model.

See also:

public array getFirstErrors ( )
return array

The first errors. The array keys are the attribute names, and the array values are the corresponding error messages. An empty array will be returned if there is no error.

                public function getFirstErrors()
{
    if (empty($this->_errors)) {
        return [];
    }
    $errors = [];
    foreach ($this->_errors as $name => $es) {
        if (!empty($es)) {
            $errors[$name] = reset($es);
        }
    }
    return $errors;
}

            
getIterator() public method

Defined in: yii\base\Model::getIterator()

Returns an iterator for traversing the attributes in the model.

This method is required by the interface IteratorAggregate.

public ArrayIterator getIterator ( )
return ArrayIterator

An iterator for traversing the items in the list.

                #[\ReturnTypeWillChange]
public function getIterator()
{
    $attributes = $this->getAttributes();
    return new ArrayIterator($attributes);
}

            
getName() public method

Returns the name of the code generator.

public string getName ( )

                public function getName()
{
    return 'Model Generator';
}

            
getScenario() public method

Defined in: yii\base\Model::getScenario()

Returns the scenario that this model is used in.

Scenario affects how validation is performed and which attributes can be massively assigned.

public string getScenario ( )
return string

The scenario that this model is in. Defaults to SCENARIO_DEFAULT.

                public function getScenario()
{
    return $this->_scenario;
}

            
getSchemaNames() protected method (available since version 2.0.5)

protected string[] getSchemaNames ( )
return string[]

All db schema names or an array with a single empty string

throws yii\base\NotSupportedException

                protected function getSchemaNames()
{
    $db = $this->getDbConnection();
    if ($this->generateRelationsFromCurrentSchema) {
        if ($db->schema->defaultSchema !== null) {
            return [$db->schema->defaultSchema];
        }
        return [''];
    }
    $schema = $db->getSchema();
    if ($schema->hasMethod('getSchemaNames')) { // keep BC to Yii versions < 2.0.4
        try {
            $schemaNames = $schema->getSchemaNames();
        } catch (NotSupportedException $e) {
            // schema names are not supported by schema
        }
    }
    if (!isset($schemaNames)) {
        if (($pos = strpos($this->tableName, '.')) !== false) {
            $schemaNames = [substr($this->tableName, 0, $pos)];
        } else {
            $schemaNames = [''];
        }
    }
    return $schemaNames;
}

            
getStickyDataFile() public method

Defined in: yii\gii\Generator::getStickyDataFile()

Returns the file path that stores the sticky attribute values.

public string getStickyDataFile ( )

                public function getStickyDataFile()
{
    return Yii::$app->getRuntimePath() . '/gii-' . Yii::getVersion() . '/' . str_replace('\\', '-', get_class($this)) . '.json';
}

            
getTableNames() protected method

protected array getTableNames ( )
return array

The table names that match the pattern specified by $tableName.

                protected function getTableNames()
{
    if ($this->tableNames !== null) {
        return $this->tableNames;
    }
    $db = $this->getDbConnection();
    if ($db === null) {
        return [];
    }
    $tableNames = [];
    if (strpos($this->tableName, '*') !== false) {
        if (($pos = strrpos($this->tableName, '.')) !== false) {
            $schema = substr($this->tableName, 0, $pos);
            $pattern = '/^' . str_replace('*', '\w+', substr($this->tableName, $pos + 1)) . '$/';
        } else {
            $schema = '';
            $pattern = '/^' . str_replace('*', '\w+', $this->tableName) . '$/';
        }
        foreach ($db->schema->getTableNames($schema) as $table) {
            if (preg_match($pattern, $table)) {
                $tableNames[] = $schema === '' ? $table : ($schema . '.' . $table);
            }
        }
    } elseif (($table = $db->getTableSchema($this->tableName, true)) !== null) {
        $tableNames[] = $this->tableName;
        $this->classNames[$this->tableName] = $this->modelClass;
    }
    return $this->tableNames = $tableNames;
}

            
getTablePrefix() public method (available since version 2.0.5)

Returns the tablePrefix property of the DB connection as specified

See also getDbConnection().

public string getTablePrefix ( )

                public function getTablePrefix()
{
    $db = $this->getDbConnection();
    return $db === null ? '' : $db->tablePrefix;
}

            
getTemplatePath() public method
public string getTemplatePath ( )
return string

The root path of the template files that are currently being used.

throws yii\base\InvalidConfigException

if $template is invalid

                public function getTemplatePath()
{
    if (isset($this->templates[$this->template])) {
        return $this->templates[$this->template];
    }
    throw new InvalidConfigException("Unknown template: {$this->template}");
}

            
getValidators() public method

Defined in: yii\base\Model::getValidators()

Returns all the validators declared in rules().

This method differs from getActiveValidators() in that the latter only returns the validators applicable to the current $scenario.

Because this method returns an ArrayObject object, you may manipulate it by inserting or removing validators (useful in model behaviors). For example,

$model->validators[] = $newValidator;
public ArrayObject|yii\validators\Validator[] getValidators ( )
return ArrayObject|yii\validators\Validator[]

All the validators declared in the model.

                public function getValidators()
{
    if ($this->_validators === null) {
        $this->_validators = $this->createValidators();
    }
    return $this->_validators;
}

            
hasErrors() public method

Defined in: yii\base\Model::hasErrors()

Returns a value indicating whether there is any validation error.

public boolean hasErrors ( $attribute null )
$attribute string|null

Attribute name. Use null to check all attributes.

return boolean

Whether there is any error.

                public function hasErrors($attribute = null)
{
    return $attribute === null ? !empty($this->_errors) : isset($this->_errors[$attribute]);
}

            
hasEventHandlers() public method

Defined in: yii\base\Component::hasEventHandlers()

Returns a value indicating whether there is any handler attached to the named event.

public boolean hasEventHandlers ( $name )
$name string

The event name

return boolean

Whether there is any handler attached to the event.

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public method

Defined in: yii\base\Component::hasMethod()

Returns a value indicating whether a method is defined.

A method is defined if:

  • the class has a method with the specified name
  • an attached behavior has a method with the given name (when $checkBehaviors is true).
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

The property name

$checkBehaviors boolean

Whether to treat behaviors' methods as methods of this component

return boolean

Whether the method is defined

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public method

Defined in: yii\base\Component::hasProperty()

Returns a value indicating whether a property is defined for this component.

A property is defined if:

  • the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a property of the given name (when $checkBehaviors is true).

See also:

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property is defined

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
hints() public method

Returns the list of hint messages.

The array keys are the attribute names, and the array values are the corresponding hint messages. Hint messages will be displayed to end users when they are filling the form for the generator.

public array hints ( )
return array

The list of hint messages

                public function hints()
{
    return array_merge(parent::hints(), [
        'ns' => 'This is the namespace of the ActiveRecord class to be generated, e.g., <code>app\models</code>',
        'db' => 'This is the ID of the DB application component.',
        'tableName' => 'This is the name of the DB table that the new ActiveRecord class is associated with, e.g. <code>post</code>.
            The table name may consist of the DB schema part if needed, e.g. <code>public.post</code>.
            The table name may end with asterisk to match multiple table names, e.g. <code>tbl_*</code>
            will match tables who name starts with <code>tbl_</code>. In this case, multiple ActiveRecord classes
            will be generated, one for each matching table name; and the class names will be generated from
            the matching characters. For example, table <code>tbl_post</code> will generate <code>Post</code>
            class.',
        'modelClass' => 'This is the name of the ActiveRecord class to be generated. The class name should not contain
            the namespace part as it is specified in "Namespace". You do not need to specify the class name
            if "Table Name" ends with asterisk, in which case multiple ActiveRecord classes will be generated.',
        'standardizeCapitals' => 'This indicates whether the generated class names should have standardized capitals. For example,
        table names like <code>SOME_TABLE</code> or <code>Other_Table</code> will have class names <code>SomeTable</code>
        and <code>OtherTable</code>, respectively. If not checked, the same tables will have class names <code>SOMETABLE</code>
        and <code>OtherTable</code> instead.',
        'singularize' => 'This indicates whether the generated class names should be singularized. For example,
        table names like <code>some_tables</code> will have class names <code>SomeTable</code>.',
        'baseClass' => 'This is the base class of the new ActiveRecord class. It should be a fully qualified namespaced class name.',
        'generateRelations' => 'This indicates whether the generator should generate relations based on
            foreign key constraints it detects in the database. Note that if your database contains too many tables,
            you may want to uncheck this option to accelerate the code generation process.',
        'generateJunctionRelationMode' => 'This indicates whether junction relations are generated with `viaTable()` or `via()` (Via Model) relations.
            Make sure you also generate the junction models when using the "Via Model" option.
        ',
        'generateRelationsFromCurrentSchema' => 'This indicates whether the generator should generate relations from current schema or from all available schemas.',
        'generateRelationNameFromDestinationTable' => 'This indicates whether the relation names should use target table name.',
        'useClassConstant' => 'Use the `::class` constant instead of the `::className()` method.',
        'generateLabelsFromComments' => 'This indicates whether the generator should generate attribute labels
            by using the comments of the corresponding DB columns.',
        'useTablePrefix' => 'This indicates whether the table name returned by the generated ActiveRecord class
            should consider the <code>tablePrefix</code> setting of the DB connection. For example, if the
            table name is <code>tbl_post</code> and <code>tablePrefix=tbl_</code>, the ActiveRecord class
            will return the table name as <code>{{%post}}</code>.',
        'useSchemaName' => 'This indicates whether to include the schema name in the ActiveRecord class
            when it\'s auto generated. Only non default schema would be used.',
        'generateQuery' => 'This indicates whether to generate ActiveQuery for the ActiveRecord class.',
        'queryNs' => 'This is the namespace of the ActiveQuery class to be generated, e.g., <code>app\models</code>',
        'queryClass' => 'This is the name of the ActiveQuery class to be generated. The class name should not contain
            the namespace part as it is specified in "ActiveQuery Namespace". You do not need to specify the class name
            if "Table Name" ends with asterisk, in which case multiple ActiveQuery classes will be generated.',
        'queryBaseClass' => 'This is the base class of the new ActiveQuery class. It should be a fully qualified namespaced class name.',
    ]);
}

            
init() public method

public void init ( )

                public function init()
{
    parent::init();
    if ($this->useClassConstant === null) {
        $this->useClassConstant = PHP_VERSION_ID >= 50500;
    }
}

            
instance() public static method

Defined in: yii\base\StaticInstanceTrait::instance()

Returns static class instance, which can be used to obtain meta information.

public static static instance ( $refresh false )
$refresh boolean

Whether to re-create static instance even, if it is already cached.

return yii\gii\generators\model\Generator

Class instance.

                public static function instance($refresh = false)
{
    $className = get_called_class();
    if ($refresh || !isset(self::$_instances[$className])) {
        self::$_instances[$className] = Yii::createObject($className);
    }
    return self::$_instances[$className];
}

            
isAttributeActive() public method

Defined in: yii\base\Model::isAttributeActive()

Returns a value indicating whether the attribute is active in the current scenario.

See also activeAttributes().

public boolean isAttributeActive ( $attribute )
$attribute string

Attribute name

return boolean

Whether the attribute is active in the current scenario

                public function isAttributeActive($attribute)
{
    return in_array($attribute, $this->activeAttributes(), true);
}

            
isAttributeRequired() public method

Defined in: yii\base\Model::isAttributeRequired()

Returns a value indicating whether the attribute is required.

This is determined by checking if the attribute is associated with a required validation rule in the current $scenario.

Note that when the validator has a conditional validation applied using $when this method will return false regardless of the when condition because it may be called be before the model is loaded with data.

public boolean isAttributeRequired ( $attribute )
$attribute string

Attribute name

return boolean

Whether the attribute is required

                public function isAttributeRequired($attribute)
{
    foreach ($this->getActiveValidators($attribute) as $validator) {
        if ($validator instanceof RequiredValidator && $validator->when === null) {
            return true;
        }
    }
    return false;
}

            
isAttributeSafe() public method

Defined in: yii\base\Model::isAttributeSafe()

Returns a value indicating whether the attribute is safe for massive assignments.

See also safeAttributes().

public boolean isAttributeSafe ( $attribute )
$attribute string

Attribute name

return boolean

Whether the attribute is safe for massive assignments

                public function isAttributeSafe($attribute)
{
    return in_array($attribute, $this->safeAttributes(), true);
}

            
isColumnAutoIncremental() protected method

Checks if any of the specified columns is auto incremental.

protected boolean isColumnAutoIncremental ( $table, $columns )
$table yii\db\TableSchema

The table schema

$columns string[]

Columns to check for autoIncrement property

return boolean

Whether any of the specified columns is auto incremental.

                protected function isColumnAutoIncremental($table, $columns)
{
    foreach ($columns as $column) {
        if (isset($table->columns[$column]) && $table->columns[$column]->autoIncrement) {
            return true;
        }
    }
    return false;
}

            
isEnum() protected method

Checks if column is of ENUM type.

protected boolean isEnum ( $column )
$column yii\db\ColumnSchema

Column instance

                protected function isEnum($column)
{
    return !empty($column->enumValues) || stripos($column->dbType, 'ENUM') === 0;
}

            
isHasManyRelation() protected method (available since version 2.0.5)

Determines if relation is of has many type

protected boolean isHasManyRelation ( $table, $fks )
$table yii\db\TableSchema
$fks array

                protected function isHasManyRelation($table, $fks)
{
    $uniqueKeys = [$table->primaryKey];
    try {
        $uniqueKeys = array_merge($uniqueKeys, $this->getDbConnection()->getSchema()->findUniqueIndexes($table));
    } catch (NotSupportedException $e) {
        // ignore
    }
    foreach ($uniqueKeys as $uniqueKey) {
        if (array_diff(array_merge($uniqueKey, $fks), array_intersect($uniqueKey, $fks)) === []) {
            return false;
        }
    }
    return true;
}

            
isReservedKeyword() public method
public boolean isReservedKeyword ( $value )
$value string

The attribute to be validated

return boolean

Whether the value is a reserved PHP keyword.

                public function isReservedKeyword($value)
{
    static $keywords = [
        '__class__',
        '__dir__',
        '__file__',
        '__function__',
        '__line__',
        '__method__',
        '__namespace__',
        '__trait__',
        'abstract',
        'and',
        'array',
        'as',
        'break',
        'case',
        'catch',
        'callable',
        'cfunction',
        'class',
        'clone',
        'const',
        'continue',
        'declare',
        'default',
        'die',
        'do',
        'echo',
        'else',
        'elseif',
        'empty',
        'enddeclare',
        'endfor',
        'endforeach',
        'endif',
        'endswitch',
        'endwhile',
        'eval',
        'exception',
        'exit',
        'extends',
        'final',
        'finally',
        'for',
        'foreach',
        'function',
        'fn',
        'global',
        'goto',
        'if',
        'implements',
        'include',
        'include_once',
        'instanceof',
        'insteadof',
        'interface',
        'isset',
        'list',
        'namespace',
        'new',
        'old_function',
        'or',
        'parent',
        'php_user_filter',
        'print',
        'private',
        'protected',
        'public',
        'require',
        'require_once',
        'return',
        'static',
        'switch',
        'this',
        'throw',
        'trait',
        'try',
        'unset',
        'use',
        'var',
        'while',
        'xor',
        'yield'
    ];
    return in_array(strtolower($value), $keywords, true);
}

            
load() public method

Defined in: yii\base\Model::load()

Populates the model with input data.

This method provides a convenient shortcut for:

if (isset($_POST['FormName'])) {
    $model->attributes = $_POST['FormName'];
    if ($model->save()) {
        // handle success
    }
}

which, with load() can be written as:

if ($model->load($_POST) && $model->save()) {
    // handle success
}

load() gets the 'FormName' from the model's formName() method (which you may override), unless the $formName parameter is given. If the form name is empty, load() populates the model with the whole of $data, instead of $data['FormName'].

Note, that the data being populated is subject to the safety check by setAttributes().

public boolean load ( $data, $formName null )
$data array

The data array to load, typically $_POST or $_GET.

$formName string|null

The form name to use to load the data into the model, empty string when form not use. If not set, formName() is used.

return boolean

Whether load() found the expected form in $data.

                public function load($data, $formName = null)
{
    $scope = $formName === null ? $this->formName() : $formName;
    if ($scope === '' && !empty($data)) {
        $this->setAttributes($data);
        return true;
    } elseif (isset($data[$scope])) {
        $this->setAttributes($data[$scope]);
        return true;
    }
    return false;
}

            
loadMultiple() public static method

Defined in: yii\base\Model::loadMultiple()

Populates a set of models with the data from end user.

This method is mainly used to collect tabular data input. The data to be loaded for each model is $data[formName][index], where formName refers to the value of formName(), and index the index of the model in the $models array. If formName() is empty, $data[index] will be used to populate each model. The data being populated to each model is subject to the safety check by setAttributes().

public static boolean loadMultiple ( $models, $data, $formName null )
$models array

The models to be populated. Note that all models should have the same class.

$data array

The data array. This is usually $_POST or $_GET, but can also be any valid array supplied by end user.

$formName string|null

The form name to be used for loading the data into the models. If not set, it will use the formName() value of the first model in $models. This parameter is available since version 2.0.1.

return boolean

Whether at least one of the models is successfully populated.

                public static function loadMultiple($models, $data, $formName = null)
{
    if ($formName === null) {
        /* @var $first Model|false */
        $first = reset($models);
        if ($first === false) {
            return false;
        }
        $formName = $first->formName();
    }
    $success = false;
    foreach ($models as $i => $model) {
        /* @var $model Model */
        if ($formName == '') {
            if (!empty($data[$i]) && $model->load($data[$i], '')) {
                $success = true;
            }
        } elseif (!empty($data[$formName][$i]) && $model->load($data[$formName][$i], '')) {
            $success = true;
        }
    }
    return $success;
}

            
off() public method

Defined in: yii\base\Component::off()

Detaches an existing event handler from this component.

This method is the opposite of on().

Note: in case wildcard pattern is passed for event name, only the handlers registered with this wildcard will be removed, while handlers registered with plain names matching this wildcard will remain.

See also on().

public boolean off ( $name, $handler null )
$name string

Event name

$handler callable|null

The event handler to be removed. If it is null, all handlers attached to the named event will be removed.

return boolean

If a handler is found and detached

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
offsetExists() public method

Defined in: yii\base\Model::offsetExists()

Returns whether there is an element at the specified offset.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like isset($model[$offset]).

public boolean offsetExists ( $offset )
$offset string

The offset to check on.

return boolean

Whether or not an offset exists.

                #[\ReturnTypeWillChange]
public function offsetExists($offset)
{
    return isset($this->$offset);
}

            
offsetGet() public method

Defined in: yii\base\Model::offsetGet()

Returns the element at the specified offset.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like $value = $model[$offset];.

public mixed offsetGet ( $offset )
$offset string

The offset to retrieve element.

return mixed

The element at the offset, null if no element is found at the offset

                #[\ReturnTypeWillChange]
public function offsetGet($offset)
{
    return $this->$offset;
}

            
offsetSet() public method

Defined in: yii\base\Model::offsetSet()

Sets the element at the specified offset.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like $model[$offset] = $value;.

public void offsetSet ( $offset, $value )
$offset string

The offset to set element

$value mixed

The element value

                #[\ReturnTypeWillChange]
public function offsetSet($offset, $value)
{
    $this->$offset = $value;
}

            
offsetUnset() public method

Defined in: yii\base\Model::offsetUnset()

Sets the element value at the specified offset to null.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like unset($model[$offset]).

public void offsetUnset ( $offset )
$offset string

The offset to unset element

                #[\ReturnTypeWillChange]
public function offsetUnset($offset)
{
    $this->$offset = null;
}

            
on() public method

Defined in: yii\base\Component::on()

Attaches an event handler to an event.

The event handler must be a valid PHP callback. The following are some examples:

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

The event handler must be defined with the following signature,

function ($event)

where $event is an yii\base\Event object which includes parameters associated with the event.

Since 2.0.14 you can specify event name as a wildcard pattern:

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

See also off().

public void on ( $name, $handler, $data null, $append true )
$name string

The event name

$handler callable

The event handler

$data mixed

The data to be passed to the event handler when the event is triggered. When the event handler is invoked, this data can be accessed via yii\base\Event::$data.

$append boolean

Whether to append new event handler to the end of the existing handler list. If false, the new handler will be inserted at the beginning of the existing handler list.

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
onUnsafeAttribute() public method

Defined in: yii\base\Model::onUnsafeAttribute()

This method is invoked when an unsafe attribute is being massively assigned.

The default implementation will log a warning message if YII_DEBUG is on. It does nothing otherwise.

public void onUnsafeAttribute ( $name, $value )
$name string

The unsafe attribute name

$value mixed

The attribute value

                public function onUnsafeAttribute($name, $value)
{
    if (YII_DEBUG) {
        Yii::debug("Failed to set unsafe attribute '$name' in '" . get_class($this) . "'.", __METHOD__);
    }
}

            
render() public method

Defined in: yii\gii\Generator::render()

Generates code using the specified code template and parameters.

Note that the code template will be used as a PHP file.

public string render ( $template, $params = [] )
$template string

The code template file. This must be specified as a file path relative to $templatePath.

$params array

List of parameters to be passed to the template file.

return string

The generated code

                public function render($template, $params = [])
{
    $view = new View();
    $params['generator'] = $this;
    return $view->renderFile($this->getTemplatePath() . '/' . $template, $params, $this);
}

            
requiredTemplates() public method

Returns a list of code template files that are required.

Derived classes usually should override this method if they require the existence of certain template files.

public array requiredTemplates ( )
return array

List of code template files that are required. They should be file paths relative to $templatePath.

                public function requiredTemplates()
{
    $templates = ['model.php'];
    if ($this->queryClass !== null) {
        $templates[] = 'query.php';
    }
    return $templates;
}

            
resolveFields() protected method

Defined in: yii\base\ArrayableTrait::resolveFields()

Determines which fields can be returned by toArray().

This method will first extract the root fields from the given fields. Then it will check the requested root fields against those declared in fields() and extraFields() to determine which fields can be returned.

protected array resolveFields ( array $fields, array $expand )
$fields array

The fields being requested for exporting

$expand array

The additional fields being requested for exporting

return array

The list of fields to be exported. The array keys are the field names, and the array values are the corresponding object property names or PHP callables returning the field values.

                protected function resolveFields(array $fields, array $expand)
{
    $fields = $this->extractRootFields($fields);
    $expand = $this->extractRootFields($expand);
    $result = [];
    foreach ($this->fields() as $field => $definition) {
        if (is_int($field)) {
            $field = $definition;
        }
        if (empty($fields) || in_array($field, $fields, true)) {
            $result[$field] = $definition;
        }
    }
    if (empty($expand)) {
        return $result;
    }
    foreach ($this->extraFields() as $field => $definition) {
        if (is_int($field)) {
            $field = $definition;
        }
        if (in_array($field, $expand, true)) {
            $result[$field] = $definition;
        }
    }
    return $result;
}

            
rules() public method

Returns the validation rules for attributes.

Child classes should override this method like the following so that the parent rules are included:

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

Validation rules are used by validate() to check if attribute values are valid. Child classes may override this method to declare different validation rules.

Each rule is an array with the following structure:

[
    ['attribute1', 'attribute2'],
    'validator type',
    'on' => ['scenario1', 'scenario2'],
    //...other parameters...
]

where

  • attribute list: required, specifies the attributes array to be validated, for single attribute you can pass a string;
  • validator type: required, specifies the validator to be used. It can be a built-in validator name, a method name of the model class, an anonymous function, or a validator class name.
  • on: optional, specifies the scenarios array in which the validation rule can be applied. If this option is not set, the rule will apply to all scenarios.
  • additional name-value pairs can be specified to initialize the corresponding validator properties. Please refer to individual validator class API for possible properties.

A validator can be either an object of a class extending yii\validators\Validator, or a model class method (called inline validator) that has the following signature:

// $params refers to validation parameters given in the rule
function validatorName($attribute, $params)

In the above $attribute refers to the attribute currently being validated while $params contains an array of validator configuration options such as max in case of string validator. The value of the attribute currently being validated can be accessed as $this->$attribute. Note the $ before attribute; this is taking the value of the variable $attribute and using it as the name of the property to access.

Yii also provides a set of built-in validators. Each one has an alias name which can be used when specifying a validation rule.

Below are some examples:

[
    // built-in "required" validator
    [['username', 'password'], 'required'],
    // built-in "string" validator customized with "min" and "max" properties
    ['username', 'string', 'min' => 3, 'max' => 12],
    // built-in "compare" validator that is used in "register" scenario only
    ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'],
    // an inline validator defined via the "authenticate()" method in the model class
    ['password', 'authenticate', 'on' => 'login'],
    // a validator of class "DateRangeValidator"
    ['dateRange', 'DateRangeValidator'],
];

Note, in order to inherit rules defined in the parent class, a child class needs to merge the parent rules with child rules using functions such as array_merge().

public array rules ( )
return array

Validation rules

                public function rules()
{
    return array_merge(parent::rules(), [
        [['db', 'tableName', 'modelClass', 'baseClass', 'queryClass', 'queryBaseClass'], 'trim'],
        [
            ['ns', 'queryNs'],
            'filter',
            'filter' => static function ($value) {
                return $value === null ? null : trim($value, ' \\');
            }
        ],
        [['db', 'ns', 'tableName', 'baseClass', 'queryNs', 'queryBaseClass'], 'required'],
        [['db', 'modelClass', 'queryClass'], 'match', 'pattern' => '/^\w+$/', 'message' => 'Only word characters are allowed.'],
        [['ns', 'baseClass', 'queryNs', 'queryBaseClass'], 'match', 'pattern' => '/^[\w\\\\]+$/', 'message' => 'Only word characters and backslashes are allowed.'],
        [['tableName'], 'match', 'pattern' => '/^([\w ]+\.)?([\w\* ]+)$/', 'message' => 'Only word characters, and optionally spaces, an asterisk and/or a dot are allowed.'],
        [['db'], 'validateDb'],
        [['ns', 'queryNs'], 'validateNamespace'],
        [['tableName'], 'validateTableName'],
        [['modelClass'], 'validateModelClass', 'skipOnEmpty' => false],
        [['baseClass'], 'validateClass', 'params' => ['extends' => ActiveRecord::className()]],
        [['queryBaseClass'], 'validateClass', 'params' => ['extends' => ActiveQuery::className()]],
        [['generateRelations'], 'in', 'range' => [self::RELATIONS_NONE, self::RELATIONS_ALL, self::RELATIONS_ALL_INVERSE]],
        [['generateJunctionRelationMode'], 'in', 'range' => [self::JUNCTION_RELATION_VIA_TABLE, self::JUNCTION_RELATION_VIA_MODEL]],
        [
            ['generateLabelsFromComments', 'useTablePrefix', 'useSchemaName', 'generateQuery', 'generateRelationsFromCurrentSchema', 'generateRelationNameFromDestinationTable', 'useClassConstant', 'enableI18N', 'standardizeCapitals', 'singularize'],
            'boolean'
        ],
        [['messageCategory'], 'validateMessageCategory', 'skipOnEmpty' => false],
    ]);
}

            
safeAttributes() public method

Defined in: yii\base\Model::safeAttributes()

Returns the attribute names that are safe to be massively assigned in the current scenario.

public string[] safeAttributes ( )
return string[]

Safe attribute names

                public function safeAttributes()
{
    $scenario = $this->getScenario();
    $scenarios = $this->scenarios();
    if (!isset($scenarios[$scenario])) {
        return [];
    }
    $attributes = [];
    foreach ($scenarios[$scenario] as $attribute) {
        if (
            $attribute !== ''
            && strncmp($attribute, '!', 1) !== 0
            && !in_array('!' . $attribute, $scenarios[$scenario])
        ) {
            $attributes[] = $attribute;
        }
    }
    return $attributes;
}

            
save() public method

Defined in: yii\gii\Generator::save()

Saves the generated code into files.

public boolean save ( $files, $answers, &$results )
$files yii\gii\CodeFile[]

The code files to be saved

$answers array
$results string

This parameter receives a value from this method indicating the log messages generated while saving the code files.

return boolean

Whether files are successfully saved without any error.

                public function save($files, $answers, &$results)
{
    $lines = ['Generating code using template "' . $this->getTemplatePath() . '"...'];
    $hasError = false;
    foreach ($files as $file) {
        $relativePath = $file->getRelativePath();
        if (isset($answers[$file->id]) && !empty($answers[$file->id]) && $file->operation !== CodeFile::OP_SKIP) {
            $error = $file->save();
            if (is_string($error)) {
                $hasError = true;
                $lines[] = "generating $relativePath\n<span class=\"error\">$error</span>";
            } else {
                $lines[] = $file->operation === CodeFile::OP_CREATE ? " generated $relativePath" : " overwrote $relativePath";
            }
        } else {
            $lines[] = "   skipped $relativePath";
        }
    }
    $lines[] = "done!\n";
    $results = implode("\n", $lines);
    return !$hasError;
}

            
scenarios() public method

Defined in: yii\base\Model::scenarios()

Returns a list of scenarios and the corresponding active attributes.

An active attribute is one that is subject to validation in the current scenario. The returned array should be in the following format:

[
    'scenario1' => ['attribute11', 'attribute12', ...],
    'scenario2' => ['attribute21', 'attribute22', ...],
    ...
]

By default, an active attribute is considered safe and can be massively assigned. If an attribute should NOT be massively assigned (thus considered unsafe), please prefix the attribute with an exclamation character (e.g. '!rank').

The default implementation of this method will return all scenarios found in the rules() declaration. A special scenario named SCENARIO_DEFAULT will contain all attributes found in the rules(). Each scenario will be associated with the attributes that are being validated by the validation rules that apply to the scenario.

public array scenarios ( )
return array

A list of scenarios and the corresponding active attributes.

                public function scenarios()
{
    $scenarios = [self::SCENARIO_DEFAULT => []];
    foreach ($this->getValidators() as $validator) {
        foreach ($validator->on as $scenario) {
            $scenarios[$scenario] = [];
        }
        foreach ($validator->except as $scenario) {
            $scenarios[$scenario] = [];
        }
    }
    $names = array_keys($scenarios);
    foreach ($this->getValidators() as $validator) {
        if (empty($validator->on) && empty($validator->except)) {
            foreach ($names as $name) {
                foreach ($validator->attributes as $attribute) {
                    $scenarios[$name][$attribute] = true;
                }
            }
        } elseif (empty($validator->on)) {
            foreach ($names as $name) {
                if (!in_array($name, $validator->except, true)) {
                    foreach ($validator->attributes as $attribute) {
                        $scenarios[$name][$attribute] = true;
                    }
                }
            }
        } else {
            foreach ($validator->on as $name) {
                foreach ($validator->attributes as $attribute) {
                    $scenarios[$name][$attribute] = true;
                }
            }
        }
    }
    foreach ($scenarios as $scenario => $attributes) {
        if (!empty($attributes)) {
            $scenarios[$scenario] = array_keys($attributes);
        }
    }
    return $scenarios;
}

            
setAttributes() public method

Defined in: yii\base\Model::setAttributes()

Sets the attribute values in a massive way.

See also:

public void setAttributes ( $values, $safeOnly true )
$values array

Attribute values (name => value) to be assigned to the model.

$safeOnly boolean

Whether the assignments should only be done to the safe attributes. A safe attribute is one that is associated with a validation rule in the current $scenario.

                public function setAttributes($values, $safeOnly = true)
{
    if (is_array($values)) {
        $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
        foreach ($values as $name => $value) {
            if (isset($attributes[$name])) {
                $this->$name = $value;
            } elseif ($safeOnly) {
                $this->onUnsafeAttribute($name, $value);
            }
        }
    }
}

            
setScenario() public method

Defined in: yii\base\Model::setScenario()

Sets the scenario for the model.

Note that this method does not check if the scenario exists or not. The method validate() will perform this check.

public void setScenario ( $value )
$value string

The scenario that this model is in.

                public function setScenario($value)
{
    $this->_scenario = $value;
}

            
stickyAttributes() public method

Returns the list of sticky attributes.

A sticky attribute will remember its value and will initialize the attribute with this value when the generator is restarted.

public array stickyAttributes ( )
return array

List of sticky attributes

                public function stickyAttributes()
{
    return array_merge(
        parent::stickyAttributes(),
        [
            'ns',
            'db',
            'baseClass',
            'generateRelations',
            'generateJunctionRelationMode',
            'generateLabelsFromComments',
            'queryNs',
            'queryBaseClass',
            'useTablePrefix',
            'generateQuery',
            'useClassConstant',
        ]
    );
}

            
successMessage() public method

Defined in: yii\gii\Generator::successMessage()

Returns the message to be displayed when the newly generated code is saved successfully.

Child classes may override this method to customize the message.

public string successMessage ( )
return string

The message to be displayed when the newly generated code is saved successfully.

                public function successMessage()
{
    return 'The code has been generated successfully.';
}

            
toArray() public method

Defined in: yii\base\ArrayableTrait::toArray()

Converts the model into an array.

This method will first identify which fields to be included in the resulting array by calling resolveFields(). It will then turn the model into an array with these fields. If $recursive is true, any embedded objects will also be converted into arrays. When embedded objects are yii\base\Arrayable, their respective nested fields will be extracted and passed to toArray().

If the model implements the yii\web\Linkable interface, the resulting array will also have a _link element which refers to a list of links as specified by the interface.

public array toArray ( array $fields = [], array $expand = [], $recursive true )
$fields array

The fields being requested. If empty or if it contains '*', all fields as specified by fields() will be returned. Fields can be nested, separated with dots (.). e.g.: item.field.sub-field $recursive must be true for nested fields to be extracted. If $recursive is false, only the root fields will be extracted.

$expand array

The additional fields being requested for exporting. Only fields declared in extraFields() will be considered. Expand can also be nested, separated with dots (.). e.g.: item.expand1.expand2 $recursive must be true for nested expands to be extracted. If $recursive is false, only the root expands will be extracted.

$recursive boolean

Whether to recursively return array representation of embedded objects.

return array

The array representation of the object

                public function toArray(array $fields = [], array $expand = [], $recursive = true)
{
    $data = [];
    foreach ($this->resolveFields($fields, $expand) as $field => $definition) {
        $attribute = is_string($definition) ? $this->$definition : $definition($this, $field);
        if ($recursive) {
            $nestedFields = $this->extractFieldsFor($fields, $field);
            $nestedExpand = $this->extractFieldsFor($expand, $field);
            if ($attribute instanceof Arrayable) {
                $attribute = $attribute->toArray($nestedFields, $nestedExpand);
            } elseif ($attribute instanceof \JsonSerializable) {
                $attribute = $attribute->jsonSerialize();
            } elseif (is_array($attribute)) {
                $attribute = array_map(
                    function ($item) use ($nestedFields, $nestedExpand) {
                        if ($item instanceof Arrayable) {
                            return $item->toArray($nestedFields, $nestedExpand);
                        } elseif ($item instanceof \JsonSerializable) {
                            return $item->jsonSerialize();
                        }
                        return $item;
                    },
                    $attribute
                );
            }
        }
        $data[$field] = $attribute;
    }
    if ($this instanceof Linkable) {
        $data['_links'] = Link::serialize($this->getLinks());
    }
    return $recursive ? ArrayHelper::toArray($data) : $data;
}

            
trigger() public method

Defined in: yii\base\Component::trigger()

Triggers an event.

This method represents the happening of an event. It invokes all attached handlers for the event including class-level handlers.

public void trigger ( $name, yii\base\Event $event null )
$name string

The event name

$event yii\base\Event|null

The event instance. If not set, a default yii\base\Event object will be created.

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
validate() public method

Defined in: yii\base\Model::validate()

Performs the data validation.

This method executes the validation rules applicable to the current $scenario. The following criteria are used to determine whether a rule is currently applicable:

  • the rule must be associated with the attributes relevant to the current scenario;
  • the rules must be effective for the current scenario.

This method will call beforeValidate() and afterValidate() before and after the actual validation, respectively. If beforeValidate() returns false, the validation will be cancelled and afterValidate() will not be called.

Errors found during the validation can be retrieved via getErrors(), getFirstErrors() and getFirstError().

public boolean validate ( $attributeNames null, $clearErrors true )
$attributeNames string[]|string|null

Attribute name or list of attribute names that should be validated. If this parameter is empty, it means any attribute listed in the applicable validation rules should be validated.

$clearErrors boolean

Whether to call clearErrors() before performing validation

return boolean

Whether the validation is successful without any error.

throws yii\base\InvalidArgumentException

if the current scenario is unknown.

                public function validate($attributeNames = null, $clearErrors = true)
{
    if ($clearErrors) {
        $this->clearErrors();
    }
    if (!$this->beforeValidate()) {
        return false;
    }
    $scenarios = $this->scenarios();
    $scenario = $this->getScenario();
    if (!isset($scenarios[$scenario])) {
        throw new InvalidArgumentException("Unknown scenario: $scenario");
    }
    if ($attributeNames === null) {
        $attributeNames = $this->activeAttributes();
    }
    $attributeNames = (array)$attributeNames;
    foreach ($this->getActiveValidators() as $validator) {
        $validator->validateAttributes($this, $attributeNames);
    }
    $this->afterValidate();
    return !$this->hasErrors();
}

            
validateClass() public method

Defined in: yii\gii\Generator::validateClass()

An inline validator that checks if the attribute value refers to an existing class name.

If the extends option is specified, it will also check if the class is a child class of the class represented by the extends option.

public void validateClass ( $attribute, $params )
$attribute string

The attribute being validated

$params array

The validation options

                public function validateClass($attribute, $params)
{
    $class = $this->$attribute;
    try {
        if (class_exists($class)) {
            if (isset($params['extends'])) {
                if (ltrim($class, '\\') !== ltrim($params['extends'], '\\') && !is_subclass_of($class, $params['extends'])) {
                    $this->addError($attribute, "'$class' must extend from {$params['extends']} or its child class.");
                }
            }
        } else {
            $this->addError($attribute, "Class '$class' does not exist or has syntax error.");
        }
    } catch (\Exception $e) {
        $this->addError($attribute, "Class '$class' does not exist or has syntax error.");
    }
}

            
validateDb() public method

Validates the $db attribute.

public void validateDb ( )

                public function validateDb()
{
    if (!Yii::$app->has($this->db)) {
        $this->addError('db', 'There is no application component named "db".');
    } elseif (!Yii::$app->get($this->db) instanceof Connection) {
        $this->addError('db', 'The "db" application component must be a DB connection instance.');
    }
}

            
validateMessageCategory() public method

Defined in: yii\gii\Generator::validateMessageCategory()

Checks if message category is not empty when I18N is enabled.

public void validateMessageCategory ( )

                public function validateMessageCategory()
{
    if ($this->enableI18N) {
        if (empty($this->messageCategory)) {
            $this->addError('messageCategory', 'Message Category cannot be blank.');
        } elseif (!preg_match('~^[\w./-]+$~', $this->messageCategory)) {
            $this->addError('messageCategory', 'Message Category is not valid. It should contain only alphanumeric characters, ".", "-", "/", and "_".');
        }
    }
}

            
validateModelClass() public method

Validates the $modelClass attribute.

public void validateModelClass ( )

                public function validateModelClass()
{
    if ($this->isReservedKeyword($this->modelClass)) {
        $this->addError('modelClass', 'Class name cannot be a reserved PHP keyword.');
    }
    if ((empty($this->tableName) || substr_compare($this->tableName, '*', -1, 1)) && $this->modelClass == '') {
        $this->addError('modelClass', 'Model Class cannot be blank if table name does not end with asterisk.');
    }
}

            
validateMultiple() public static method

Defined in: yii\base\Model::validateMultiple()

Validates multiple models.

This method will validate every model. The models being validated may be of the same or different types.

public static boolean validateMultiple ( $models, $attributeNames null )
$models array

The models to be validated

$attributeNames array|null

List of attribute names that should be validated. If this parameter is empty, it means any attribute listed in the applicable validation rules should be validated.

return boolean

Whether all models are valid. False will be returned if one or multiple models have validation error.

                public static function validateMultiple($models, $attributeNames = null)
{
    $valid = true;
    /* @var $model Model */
    foreach ($models as $model) {
        $valid = $model->validate($attributeNames) && $valid;
    }
    return $valid;
}

            
validateNamespace() public method

Validates the namespace.

public void validateNamespace ( $attribute )
$attribute string

Namespace variable.

                public function validateNamespace($attribute)
{
    $value = $this->$attribute;
    $value = ltrim($value, '\\');
    $path = Yii::getAlias('@' . str_replace('\\', '/', $value), false);
    if ($path === false) {
        $this->addError($attribute, 'Namespace must be associated with an existing directory.');
    }
}

            
validateNewClass() public method

Defined in: yii\gii\Generator::validateNewClass()

An inline validator that checks if the attribute value refers to a valid namespaced class name.

The validator will check if the directory containing the new class file exist or not.

public void validateNewClass ( $attribute, $params )
$attribute string

The attribute being validated

$params array

The validation options

                public function validateNewClass($attribute, $params)
{
    $class = ltrim($this->$attribute, '\\');
    if (($pos = strrpos($class, '\\')) === false) {
        $this->addError($attribute, "The class name must contain fully qualified namespace name.");
    } else {
        $ns = substr($class, 0, $pos);
        $path = Yii::getAlias('@' . str_replace('\\', '/', $ns), false);
        if ($path === false) {
            $this->addError($attribute, "The class namespace is invalid: $ns");
        } elseif (!is_dir($path)) {
            $this->addError($attribute, "Please make sure the directory containing this class exists: $path");
        }
    }
}

            
validateTableName() public method

Validates the $tableName attribute.

public void validateTableName ( )

                public function validateTableName()
{
    if (strpos($this->tableName, '*') !== false && substr_compare($this->tableName, '*', -1, 1)) {
        $this->addError('tableName', 'Asterisk is only allowed as the last character.');
        return;
    }
    $tables = $this->getTableNames();
    if (empty($tables)) {
        $this->addError('tableName', "Table '{$this->tableName}' does not exist.");
    } else {
        foreach ($tables as $table) {
            $class = $this->generateClassName($table);
            if ($this->isReservedKeyword($class)) {
                $this->addError('tableName', "Table '$table' will generate a class which is a reserved PHP keyword.");
                break;
            }
        }
    }
}

            
validateTemplate() public method

Defined in: yii\gii\Generator::validateTemplate()

Validates the template selection.

This method validates whether the user selects an existing template and the template contains all required template files as specified in requiredTemplates().

public void validateTemplate ( )

                public function validateTemplate()
{
    $templates = $this->templates;
    if (!isset($templates[$this->template])) {
        $this->addError('template', 'Invalid template selection.');
    } else {
        $templatePath = $this->templates[$this->template];
        foreach ($this->requiredTemplates() as $template) {
            if (!is_file(Yii::getAlias($templatePath . '/' . $template))) {
                $this->addError('template', "Unable to find the required code template file '$template'.");
            }
        }
    }
}