Class yii\gii\CodeFile
Inheritance | yii\gii\CodeFile » yii\base\BaseObject |
---|---|
Available since extension's version | 2.0 |
Source Code | https://github.com/yiisoft/yii2-gii/blob/master/src/CodeFile.php |
CodeFile represents a code file to be generated.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$content | string | The newly generated code content | yii\gii\CodeFile |
$id | string | An ID that uniquely identifies this code file. | yii\gii\CodeFile |
$operation | string | The operation to be performed. | yii\gii\CodeFile |
$path | string | The file path that the new code should be saved to. | yii\gii\CodeFile |
$relativePath | string | The code file path relative to the application base path. | yii\gii\CodeFile |
$type | string | The code file extension (e.g. php, txt). | yii\gii\CodeFile |
Public Methods
Method | Description | Defined By |
---|---|---|
__construct() | Constructor. | yii\gii\CodeFile |
diff() | Returns diff or false if it cannot be calculated | yii\gii\CodeFile |
getRelativePath() | yii\gii\CodeFile | |
getType() | yii\gii\CodeFile | |
preview() | Returns preview or false if it cannot be rendered | yii\gii\CodeFile |
save() | Saves the code into the file specified by $path. | yii\gii\CodeFile |
Constants
Constant | Value | Description | Defined By |
---|---|---|---|
OP_CREATE | 'create' | The code file is new. | yii\gii\CodeFile |
OP_OVERWRITE | 'overwrite' | The code file already exists, and the new one may need to overwrite it. | yii\gii\CodeFile |
OP_SKIP | 'skip' | The new code file and the existing one are identical. | yii\gii\CodeFile |
Property Details
The operation to be performed. This can be OP_CREATE, OP_OVERWRITE or OP_SKIP.
The file path that the new code should be saved to.
The code file path relative to the application base path.
Method Details
Constructor.
public void __construct ( $path, $content, $config = [] ) | ||
$path | string |
The file path that the new code should be saved to. |
$content | string |
The newly generated code content. |
$config | array |
Name-value pairs that will be used to initialize the object properties |
public function __construct($path, $content, $config = [])
{
parent::__construct($config);
$this->path = strtr($path, '/\\', DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR);
$this->content = $content;
$this->id = md5($this->path);
if (is_file($path)) {
$this->operation = file_get_contents($path) === $content ? self::OP_SKIP : self::OP_OVERWRITE;
} else {
$this->operation = self::OP_CREATE;
}
}
Returns diff or false if it cannot be calculated
public boolean|string diff ( ) |
public function diff()
{
$type = strtolower($this->getType());
if (in_array($type, ['jpg', 'gif', 'png', 'exe'])) {
return false;
} elseif ($this->operation === self::OP_OVERWRITE) {
return $this->renderDiff(file($this->path), $this->content);
}
return '';
}
public string getRelativePath ( ) | ||
return | string |
The code file path relative to the application base path. |
---|
public function getRelativePath()
{
if (strpos($this->path, Yii::$app->basePath) === 0) {
return substr($this->path, strlen(Yii::$app->basePath) + 1);
}
return $this->path;
}
public string getType ( ) | ||
return | string |
The code file extension (e.g. php, txt) |
---|
public function getType()
{
if (($pos = strrpos($this->path, '.')) !== false) {
return substr($this->path, $pos + 1);
}
return 'unknown';
}
Returns preview or false if it cannot be rendered
public boolean|string preview ( ) |
public function preview()
{
if (($pos = strrpos($this->path, '.')) !== false) {
$type = substr($this->path, $pos + 1);
} else {
$type = 'unknown';
}
if ($type === 'php') {
return highlight_string($this->content, true);
} elseif (!in_array($type, ['jpg', 'gif', 'png', 'exe'])) {
return nl2br(Html::encode($this->content));
}
return false;
}
Saves the code into the file specified by $path.
public string|boolean save ( ) | ||
return | string|boolean |
The error occurred while saving the code file, or true if no error. |
---|
public function save()
{
$module = isset(Yii::$app->controller) ? Yii::$app->controller->module : null;
if ($this->operation === self::OP_CREATE) {
$dir = dirname($this->path);
if (!is_dir($dir)) {
if ($module instanceof \yii\gii\Module) {
$mask = @umask(0);
$result = @mkdir($dir, $module->newDirMode, true);
@umask($mask);
} else {
$result = @mkdir($dir, 0777, true);
}
if (!$result) {
return "Unable to create the directory '$dir'.";
}
}
}
if (@file_put_contents($this->path, $this->content) === false) {
return "Unable to write the file '{$this->path}'.";
}
if ($module instanceof \yii\gii\Module) {
$mask = @umask(0);
@chmod($this->path, $module->newFileMode);
@umask($mask);
}
return true;
}