创建已存在的文件

时间:2016-12-08 02:23:32

标签: laravel-5 artisan

所以,我正在尝试在Laravel 5.3上使用PHP Artisan为我的项目中的每个Cron配置创建一个类文件,我这样做是因为我可能想要从一个单独的GUI创建这些文件在将来。

我能够创建文件,并且我正在使用存根,所以一切都按原样生成,然而问题是由于某种原因,如果一个文件,说“cron_4”存在并且我调用我的自定义命令php artisan make:cron cron_4它允许我这样做,只会覆盖现有文件。

到目前为止,这是我的代码。关于我在这里做错了什么的想法?

<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputOption;

class CronMakeCommand extends GeneratorCommand
{
/**
 * The console command name.
 *
 * @var string
 */
protected $name = 'make:cron';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Create a new Cron class';

/**
 * The type of class being generated.
 *
 * @var string
 */
protected $type = 'Cron';

/**
 * Get the stub file for the generator.
 *
 * @return string
 */
protected function getStub()
{
    return __DIR__.'/stubs/cron.stub';
}

/**
 * Get the default namespace for the class.
 *
 * @param  string  $rootNamespace
 * @return string
 */
protected function getDefaultNamespace($rootNamespace)
{
    return $rootNamespace.'\Crons';
}

/**
 * Execute the console command.
 *
 * @return void
 */
public function fire()
{
    if (! $this->option('id')) {
        return $this->error('Missing required option: --id');
    }

    parent::fire();
}

/**
 * Replace the class name for the given stub.
 *
 * @param  string  $stub
 * @param  string  $name
 * @return string
 */
protected function replaceClass($stub, $name)
{
    $stub = parent::replaceClass($stub, $name);

    return str_replace('dummy:cron', 'Cron_' . $this->option('id'), $stub);
}

/**
 * Determine if the class already exists.
 *
 * @param  string  $rawName
 * @return bool
 */
protected function alreadyExists($rawName)
{
    return class_exists($rawName);
}

/**
 * Get the console command options.
 *
 * @return array
 */
protected function getOptions()
{
    return [
        ['id', null, InputOption::VALUE_REQUIRED, 'The ID of the Cron being Generated.'],
    ];
}
}

1 个答案:

答案 0 :(得分:0)

我明白了,这是我的自定义代码,应该责备

/**
 * Determine if the class already exists.
 *
 * @param  string  $rawName
 * @return bool
 */
protected function alreadyExists($rawName)
{
    return class_exists($rawName);
}

这会覆盖默认配置,这可能会因$rawName变量而失败。 在我的情况下,简单地删除此功能解决了这个问题。