forked from Lomkit/laravel-rest-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathResourceCommand.php
131 lines (112 loc) · 2.98 KB
/
ResourceCommand.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
namespace Lomkit\Rest\Console\Commands;
use Illuminate\Console\GeneratorCommand;
use Illuminate\Contracts\Console\PromptsForMissingInput;
use Illuminate\Support\Str;
use Lomkit\Rest\Console\ResolvesStubPath;
class ResourceCommand extends GeneratorCommand implements PromptsForMissingInput
{
use ResolvesStubPath;
/**
* The console command signature.
*
* @var string
*/
protected $signature = 'rest:resource {name : The name of the resource}
{--model= : The model to be associated with}
{--path= : The location where the resource file should be created}';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Resource';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new resource class';
public function handle()
{
parent::handle();
if (is_null($this->option('path'))) {
$this->callSilent('rest:base-resource', [
'name' => 'Resource',
]);
}
}
/**
* Get the path where the action file should be created.
*
* @param string $name
*
* @return string
*/
protected function getPath($name)
{
if (!is_null($this->option('path'))) {
return $this->option('path').'/'.$this->argument('name').'.php';
}
return parent::getPath($name);
}
/**
* Build the class with the given name.
*
* @param string $name
*
* @return string
*/
protected function buildClass($name)
{
$model = $this->option('model');
$modelNamespace = $this->getModelNamespace();
if (is_null($model)) {
$model = $modelNamespace.'Model';
} elseif (!Str::startsWith($model, [
$modelNamespace, '\\',
])) {
$model = $modelNamespace.$model;
}
$replace = [
'DummyFullModel' => $model,
'{{ namespacedModel }}' => $model,
'{{namespacedModel}}' => $model,
];
return str_replace(
array_keys($replace),
array_values($replace),
parent::buildClass($name)
);
}
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return $this->resolveStubPath('/stubs/rest/resource.stub');
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
*
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Rest\Resources';
}
/**
* Get the default namespace for the class.
*
* @return string
*/
protected function getModelNamespace()
{
$rootNamespace = $this->laravel->getNamespace();
return is_dir(app_path('Models')) ? $rootNamespace.'Models\\' : $rootNamespace;
}
}