src/Prettus/Repository/Generators/ControllerGenerator.php
<?php
namespace Prettus\Repository\Generators;
use Illuminate\Support\Str;
/**
* Class ControllerGenerator
* @package Prettus\Repository\Generators
* @author Anderson Andrade <contato@andersonandra.de>
*/
class ControllerGenerator extends Generator
{
/**
* Get stub name.
*
* @var string
*/
protected $stub = 'controller/controller';
/**
* Get root namespace.
*
* @return string
*/
public function getRootNamespace()
{
return str_replace('/', '\\', parent::getRootNamespace() . parent::getConfigGeneratorClassPath($this->getPathConfigNode()));
}
/**
* Get generator path config node.
*
* @return string
*/
public function getPathConfigNode()
{
return 'controllers';
}
/**
* Get destination path for generated file.
*
* @return string
*/
public function getPath()
{
return $this->getBasePath() . '/' . parent::getConfigGeneratorClassPath($this->getPathConfigNode(), true) . '/' . $this->getControllerName() . 'Controller.php';
}
/**
* Get base path of destination file.
*
* @return string
*/
public function getBasePath()
{
return config('repository.generator.basePath', app()->path());
}
/**
* Gets controller name based on model
*
* @return string
*/
public function getControllerName()
{
return ucfirst($this->getPluralName());
}
/**
* Gets plural name based on model
*
* @return string
*/
public function getPluralName()
{
return Str::plural(lcfirst(ucwords($this->getClass())));
}
/**
* Get array replacements.
*
* @return array
*/
public function getReplacements()
{
return array_merge(parent::getReplacements(), [
'controller' => $this->getControllerName(),
'plural' => $this->getPluralName(),
'singular' => $this->getSingularName(),
'validator' => $this->getValidator(),
'repository' => $this->getRepository(),
'appname' => $this->getAppNamespace(),
]);
}
/**
* Gets singular name based on model
*
* @return string
*/
public function getSingularName()
{
return Str::singular(lcfirst(ucwords($this->getClass())));
}
/**
* Gets validator full class name
*
* @return string
*/
public function getValidator()
{
$validatorGenerator = new ValidatorGenerator([
'name' => $this->name,
]);
$validator = $validatorGenerator->getRootNamespace() . '\\' . $validatorGenerator->getName();
return 'use ' . str_replace([
"\\",
'/'
], '\\', $validator) . 'Validator;';
}
/**
* Gets repository full class name
*
* @return string
*/
public function getRepository()
{
$repositoryGenerator = new RepositoryInterfaceGenerator([
'name' => $this->name,
]);
$repository = $repositoryGenerator->getRootNamespace() . '\\' . $repositoryGenerator->getName();
return 'use ' . str_replace([
"\\",
'/'
], '\\', $repository) . 'Repository;';
}
}