protected function buildClass($name)
{
$stub = $this->files->get($this->getStub());
$viewPath = $this->option('view-path') ? $this->option('view-path') . '.' : '';
$crudName = strtolower($this->option('crud-name'));
$crudNameSingular = str_singular($crudName);
$modelName = $this->option('model-name');
$modelNamespace = $this->option('model-namespace');
$routeGroup = $this->option('route-group') ? $this->option('route-group') . '/' : '';
$perPage = intval($this->option('pagination'));
$viewName = snake_case($this->option('crud-name'), '-');
$fields = $this->option('fields');
$validations = rtrim($this->option('validations'), ';');
$validationRules = '';
if (trim($validations) != '') {
$validationRules = "\$this->validate(\$request, [";
$rules = explode(';', $validations);
foreach ($rules as $v) {
if (trim($v) == '') {
continue;
}
// extract field name and args
$parts = explode('#', $v);
$fieldName = trim($parts[0]);
$rules = trim($parts[1]);
$validationRules .= "\n\t\t\t'{$fieldName}' => '{$rules}',";
}
$validationRules = substr($validationRules, 0, -1);
// lose the last comma
$validationRules .= "\n\t\t]);";
}
$snippet = <<<EOD
if (\$request->hasFile('{{fieldName}}')) {
\$uploadPath = public_path('/uploads/');
\$extension = \$request->file('{{fieldName}}')->getClientOriginalExtension();
\$fileName = rand(11111, 99999) . '.' . \$extension;
\$request->file('{{fieldName}}')->move(\$uploadPath, \$fileName);
\$requestData['{{fieldName}}'] = \$fileName;
}
EOD;
$fieldsArray = explode(';', $fields);
$fileSnippet = '';
if ($fields) {
$x = 0;
foreach ($fieldsArray as $item) {
$itemArray = explode('#', $item);
if (trim($itemArray[1]) == 'file') {
$fileSnippet .= "\n\n" . str_replace('{{fieldName}}', trim($itemArray[0]), $snippet) . "\n";
}
}
}
return $this->replaceNamespace($stub, $name)->replaceViewPath($stub, $viewPath)->replaceViewName($stub, $viewName)->replaceCrudName($stub, $crudName)->replaceCrudNameSingular($stub, $crudNameSingular)->replaceModelName($stub, $modelName)->replaceModelNamespace($stub, $modelNamespace)->replaceRouteGroup($stub, $routeGroup)->replaceValidationRules($stub, $validationRules)->replacePaginationNumber($stub, $perPage)->replaceFileSnippet($stub, $fileSnippet)->replaceClass($stub, $name);
}