jetwaves / edit-array-in-file
PHP文件中数组元素的CRUD(添加、修改、列表、删除)操作。
v1.1.4
2018-02-17 10:40 UTC
This package is not auto-updated.
Last update: 2024-09-29 05:14:51 UTC
README
PHP文件中数组元素的CRUD(创建/添加/插入、修改/更新、列表/查找/搜索、删除/移除)操作。
想法:使用类似ORM的代码来操作文件内容
<?php $editor->where('aliases',[], Editor::TYPE_KV_PAIR) ->insert("'JWTAuth' => Tymon\\JWTAuth\\Facades\\JWTAuth::class".PHP_EOL) ->save()->flush();
如何使用
安装:(例如在一个Laravel 5+项目中)
composer require jetwaves/edit-array-in-file
API
- $editor->where($arrayName, $options = [], $type = self::TYPE_VARIABLE) : 查找代码片段(数组)
- $editor->find($keyword, $comp = null, $type = self::FIND_TYPE_KEY_ONLY) : 查找上面的数组中的某行
- $editor->insert($data, $insertType = self::INSERT_TYPE_RAW ) : 在数组中插入新行
- $editor->delete() : 删除find()找到的行
- $editor->save() : 在内存中重构文件行
- $editor->flush() : 将编辑后的文件内容写入文件
示例
包含库
<?php use Jetwaves\EditArrayInFile\Editor;
或者
<?php require('EditArrayInFileEditor.php');
当目标是键值对的值中的数组时)
<?php $editor = new Editor('testSource/app.php');
1.1.CRUD->R : 在PHP源代码文件中查找目标键
<?php $targetArray = editor->where('aliases',[], Editor::TYPE_KV_PAIR)->get(); echo ' '.method.'() line:'.line.' targetArray = '.print_r(targetArray, true);
结果是
() line:10 $targetArray = Array ( [0] => 'aliases' => [ // ATTENTION: there is PHP_EOL in the end of these lines who are invisible. [1] => [2] => 'App' => Illuminate\Support\Facades\App::class, [3] => 'Artisan' => Illuminate\Support\Facades\Artisan::class, [4] => [5] => ], )
1.2.CRUD->C : 在PHP源代码文件中目标键的值中插入
<?php $editor->where('aliases',[], Editor::TYPE_KV_PAIR); $editor->insert("'JWTAuth' => Tymon\\JWTAuth\\Facades\\JWTAuth::class".PHP_EOL); $editor->save()->flush();
结果是:(app.php文件的内容)
<?php return [ 'log' => env('APP_LOG', 'single'), 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, ], 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class // <====== HERE IS THE INSERTED LINE ], ];
1.3. CRUD->R : 在目标变量中搜索键
<?php $val = $editor->where('aliases',[], Editor::TYPE_KV_PAIR) ->find('App', Editor::FIND_TYPE_KEY_ONLY);
结果是
target key `s val = Illuminate\Support\Facades\App::class
1.4. CRUD->D : 删除目标键值对中的一行
<?php $editor->where('aliases',[], Editor::TYPE_KV_PAIR) ->find('JWTAuth', Editor::FIND_TYPE_ALL); $editor->delete()->save()->flush();
它将从Kernel.php文件中删除'JWTAuth'行(当目标是变量中的数组时)
<?php $editor = new Editor('testSource/Kernel.php');
2.1.CRUD->R : 在PHP源代码文件中查找目标变量
<?php $targetArray = $editor->where('$routeMiddleware',[], Editor::TYPE_VARIABLE)->get(); echo ' '.__method__.'() line:'.__line__.' $targetArray = '.print_r($targetArray, true);
结果是
() line:26 $targetArray = Array ( [0] => protected $routeMiddleware = [ // ATTENTION: there is PHP_EOL in the end of these lines who are invisible. [1] => 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, [2] => 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, [3] => 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, [4] => 'can' => \Illuminate\Auth\Middleware\Authorize::class, [5] => 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, [6] => 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, [7] => 'jwt.auth' => \App\Http\Middleware\VerifyJWTToken::class [8] => ]; )
2.2.CRUD->C : 在PHP源代码文件中目标键的值中插入
<?php $editor->where('$routeMiddleware',[], Editor::TYPE_VARIABLE); $editor->insert("'jetwaves.auth' => \\App\\Ssq\\TestMiddleware\\VerifyJWTToken::class".PHP_EOL); $editor->save()->flush();
结果是:(Kernel.php文件的内容)
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], ]; /** * The application's route middleware. * These middleware may be assigned to groups or used individually. * @var array */ protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'jwt.auth' => \App\Http\Middleware\VerifyJWTToken::class, 'jetwaves.auth' => \App\Ssq\TestMiddleware\VerifyJWTToken::class // <====== HERE IS THE INSERTED LINE ]; }
2.3. CRUD->R : 在目标变量中搜索键
<?php $editor->where('$routeMiddleware',[], Editor::TYPE_VARIABLE) ->find('bindings', Editor::FIND_TYPE_KEY_ONLY);
结果是
target key `s val = \Illuminate\Routing\Middleware\SubstituteBindings::class
2.4. CRUD->D : 删除目标变量中的一行
<?php $editor->where('$routeMiddleware',[], Editor::TYPE_VARIABLE) ->find('auth.basic', Editor::FIND_TYPE_ALL) ->delete()->save()->flush();
它将从Kernel.php文件中删除'auth.basic'行