Skip to content

Commit

Permalink
parse rules in-functions
Browse files Browse the repository at this point in the history
  • Loading branch information
oxycoder committed Apr 30, 2018
1 parent 47d792b commit 95eab08
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,16 @@ public function rules()
}
```

You can also use validate inside function
```php
$validatedData = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
'type' => 'in:foo,bar',
'thumbnail' => 'required_if:type,foo|image',
]);
```

**Result:** ![Form Request](http://marcelpociot.de/documentarian/form_request.png)

#### Controller method doc block
Expand Down
32 changes: 29 additions & 3 deletions src/Oxycoder/ApiDoc/Generators/AbstractGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,10 +192,34 @@ protected function getRouteGroup($route)
*/
protected function getRouteRules($route, $bindings)
{
$rules = []; // return available rules
list($class, $method) = explode('@', $route);
$reflection = new ReflectionClass($class);
$reflectionMethod = $reflection->getMethod($method);

// parse raw function to find validator
$filename = $reflectionMethod->getFileName();
$start_line = $reflectionMethod->getStartLine();
$end_line = $reflectionMethod->getEndLine();
$length = $end_line - $start_line;

$source = file($filename);
$body = implode('', array_slice($source, $start_line, $length));

preg_match('/(validate\(\[)(.*)(\]\))/s', $body, $result);
if (count($result) == 3) {
$stringArr = explode(',', $result[2]);

foreach ($stringArr as $line) {
$lineRule = explode('=>', $line);
$key = trim($lineRule[0], " \t\n\r\0\x0B\"'"); // trim space and double/ single qoute
$value = trim($lineRule[1], " \t\n\r\0\x0B\"'"); // trim space and double/ single qoute
if ($key != '' && $value != '') {
$rules[$key] = $value;
}
}
}

foreach ($reflectionMethod->getParameters() as $parameter) {
$parameterType = $parameter->getClass();
if (! is_null($parameterType) && class_exists($parameterType->name)) {
Expand All @@ -208,15 +232,17 @@ protected function getRouteRules($route, $bindings)
$parameterReflection->request->add($bindings);

if (method_exists($parameterReflection, 'validator')) {
return $parameterReflection->validator()->getRules();
$rules[] = $parameterReflection->validator()->getRules();
return $rules;
} else {
return $parameterReflection->rules();
$rules[] = $parameterReflection->rules();
return $rules;
}
}
}
}

return [];
return $rules;
}

/**
Expand Down

0 comments on commit 95eab08

Please sign in to comment.