私の最近のプロジェクトでは、Linux の標準的な規則に基づいて、json に記載されているさまざまなアクションを実行/実行する必要があるコンソール コマンドに取り組んでいます。
what:mv(Move),type:file,dir
what:mkdir(Make Directory)
what:touch(Make File)
what:cp(Copy), type:file,dir
what:echo (Write into File), type:override,append
what:sed (Find and Replace in file)
param スキーマは、Linux の規則とほぼ同じです。
現在のセットアップ (Mkdir、タッチ)
Json スキーマ (配列)
"actions" => [
[
'what' => "mkdir",
'param' => [
'name' => "cache",
'in' => "bootstrap",
],
],
[
'what' => "touch",
'param' => [
'name' => ".gitignore",
'in' => "bootstrap/cache",
],
]
],
そして、すべてのアクションを繰り返し処理し、それぞれ mkdir および呼び出しハンドル関数のwhat
ように、タイプ (mkdir、touch)ごとにアクション クラスを解決します。MkdirOperation
<?php
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
class MkdirOperation extends Operation
{
const ATTR_IN = "in";
const ATTR_NAME = "name";
public function handle()
{
$path = $this->_path();
$this->oIO->comment($path);
if ($this->oFileSystem->isAbsolutePath($path)) {
try {
$this->oFileSystem->mkdir($path);
} catch (IOExceptionInterface $e) {
echo "An error occurred while creating your directory at "
.$e->getPath();
}
$this->oIO->info("Directory created at:".$path);
}
}
private function _path()
{
return $this->oConfig->getBaseDir()
.$this->aParam[self::ATTR_IN].DIRECTORY_SEPARATOR
.$this->aParam[self::ATTR_NAME]
.DIRECTORY_SEPARATOR;
}
}
要件:
//somefile.php
$path = "/var/www/ins/"
//someotherfile.php
return [
'files' = [
'Path\\To\\NameSpace',
'Path\\To\\NameSpace'
]
];
したがって、基本的には、特定のルールに従って前述の変数/配列を更新/オーバーライドしたいので、その目的のために、json スキーマでルールを準備しようとしました。
"actions": [
{
"what": "sed",
"in": "path/to/somefile.php",
"find": {
"type": "variable",
"value": "path"
},
"replace": {
"type": "variable",
"value": "__DIR__.'/../vendor/compiled.php';"
}
},{
"what": "put",
"value": "Path\\To\\NameSpace",
"in": "path/to/someotherfile.php",
"find": {
"type": "array",
"at": "files"
}
}
]
使用しているコンポーネント
- symfony/コンソール
- symfony/ファインダー
- symfony/ファイルシステム
探している:
- 変数の更新/オーバーライドまたは配列からの要素のプッシュ/プルのすべてのアクションを反復処理してアクションを実行するような方法でルール セット スキーマを編成することを提案します。
- 特定の変数の値を更新し、php を使用して配列/サブ配列から要素をプッシュ/プルするメカニズム。
それでも不明な点がある場合は、お知らせください。前もって感謝します。