【发布时间】:2015-12-24 05:28:01
【问题描述】:
我用这个命令为我的项目创建了一个Artisan Command:
`php artisan make:console Repositories`
上述自定义命令的签名是:
protected $signature = 'make:repository {modelName : The name of the model}';
当这个命令被执行/触发时,会创建 2 个文件:
app/Http/Repositories/Contracts/modelNameRepositoryContract.phpapp/Http/Repositories/Eloquent/modelNameRepository.php
现在,我希望命名空间,className 应该默认写入。就像我们在触发make:controller ModelController 或make:model Model 时得到的一样。这些文件已经写入了它需要的默认内容。我只想要类似的。
我想默认使用命名空间、使用命名空间和类/合同名称填充文件。为此,这是 Repositories.php 文件中的 handle() 方法:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$modelName = $this->argument('modelName');
if ($modelName === '' || is_null($modelName) || empty($modelName)) {
$this->error('Model Name Invalid..!');
}
if (! file_exists('app/Http/Repositories/Contracts') && ! file_exists('app/Http/Repositories/Eloquent')) {
mkdir('app/Http/Repositories/Contracts', 0775, true);
mkdir('app/Http/Repositories/Eloquent', 0775, true);
$contractFileName = 'app/Http/Repositories/Contracts/' . $modelName . 'RepositoryContract.php';
$eloquentFileName = 'app/Http/Repositories/Eloquent/' . $modelName . 'Repository.php';
if(! file_exists($contractFileName) && ! file_exists($eloquentFileName)) {
$contractFileContent = "<?php\n\nnamespace App\\Http\\Repositories\\Contracts;\n\ninterface " . $modelName . "RepositoryContract\n{\n}";
file_put_contents($contractFileName, $contractFileContent);
$eloquentFileContent = "<?php\n\nnamespace App\\Http\\Repositories\\Eloquent;\n\nuse App\\Repositories\\Contracts\\".$modelName."RepositoryContract;\n\nclass " . $modelName . "Repository implements " . $modelName . "RepositoryContract\n{\n}";
file_put_contents($eloquentFileName, $eloquentFileContent);
$this->info('Repository Files Created Successfully.');
} else {
$this->error('Repository Files Already Exists.');
}
}
}
我知道上述方法不是使用 Artisan 命令创建文件的正确方法。那么,我应该如何创建文件并使用默认内容填充它。我在文档中找不到与此相关的任何内容。
那么有人可以帮我解决这个问题吗?
提前致谢。
【问题讨论】:
标签: php laravel laravel-5.1 laravel-artisan