yii\web\AssetConverter::runCommand PHP Method

runCommand() protected method

Runs a command to convert asset files.
protected runCommand ( string $command, string $basePath, string $asset, string $result ) : boolean
$command string the command to run. If prefixed with an `@` it will be treated as a path alias.
$basePath string asset base path and command working directory
$asset string the name of the asset file
$result string the name of the file to be generated by the converter command
return boolean true on success, false on failure. Failures will be logged.
    protected function runCommand($command, $basePath, $asset, $result)
    {
        $command = Yii::getAlias($command);
        $command = strtr($command, ['{from}' => escapeshellarg("{$basePath}/{$asset}"), '{to}' => escapeshellarg("{$basePath}/{$result}")]);
        $descriptor = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']];
        $pipes = [];
        $proc = proc_open($command, $descriptor, $pipes, $basePath);
        $stdout = stream_get_contents($pipes[1]);
        $stderr = stream_get_contents($pipes[2]);
        foreach ($pipes as $pipe) {
            fclose($pipe);
        }
        $status = proc_close($proc);
        if ($status === 0) {
            Yii::trace("Converted {$asset} into {$result}:\nSTDOUT:\n{$stdout}\nSTDERR:\n{$stderr}", __METHOD__);
        } elseif (YII_DEBUG) {
            throw new Exception("AssetConverter command '{$command}' failed with exit code {$status}:\nSTDOUT:\n{$stdout}\nSTDERR:\n{$stderr}");
        } else {
            Yii::error("AssetConverter command '{$command}' failed with exit code {$status}:\nSTDOUT:\n{$stdout}\nSTDERR:\n{$stderr}", __METHOD__);
        }
        return $status === 0;
    }

Usage Example

コード例 #1
0
 /**
  * {@inheritdoc}
  */
 protected function runCommand($command, $basePath, $asset, $result)
 {
     if ($command === 'render') {
         $res = Yii::$app->getView()->renderFile("{$basePath}/{$asset}");
         file_put_contents("{$basePath}/{$result}", $res);
     } else {
         return parent::runCommand($command, $basePath, $asset, $result);
     }
 }
AssetConverter