evert/phpdoc-md
Generates Markdown documentation from PHP source using phpDocumentor-style docblocks. Turn packages and libraries into clean README/API docs with configurable templates and output paths—handy for publishing reference docs to GitHub, wikis, or static sites.
Installation Add the package via Composer:
composer require evert/phpdoc-md
No additional configuration is required for basic usage.
First Use Case: Generate Markdown from PHPDoc
Use the Evert\PhpdocMd\PhpdocMd class to convert PHPDoc blocks to Markdown:
use Evert\PhpdocMd\PhpdocMd;
$phpdocMd = new PhpdocMd();
$markdown = $phpdocMd->parse('/**
* @param string $name The user\'s name
* @return void
*/');
echo $markdown;
Output:
- `$name` **string** The user's name
Where to Look First
src/PhpdocMd.php (core logic).tests/ for edge cases and examples.Parsing PHPDoc in Laravel Integrate with Laravel’s service providers or helpers to auto-generate Markdown from PHPDoc:
// app/Helpers/PHPDocHelper.php
use Evert\PhpdocMd\PhpdocMd;
class PHPDocHelper {
public static function toMarkdown(string $phpdoc): string {
return (new PhpdocMd())->parse($phpdoc);
}
}
Use in controllers/views:
$markdown = PHPDocHelper::toMarkdown(file_get_contents('path/to/Class.php'));
CLI Integration Use the package’s built-in CLI for batch processing:
vendor/bin/phpdoc-md generate src/ --output docs/
Dynamic Documentation Generation
Hook into Laravel’s events (e.g., Illuminate\Foundation\Application\Booted) to generate Markdown on demand:
// app/Providers/AppServiceProvider.php
public function boot() {
$this->app->booted(function () {
$markdown = PHPDocHelper::toMarkdown(file_get_contents(app_path('Http/Controllers/UserController.php')));
cache()->forever('user_controller_docs', $markdown);
});
}
Integration with IDE/Editor Plugins Use the package to pre-process PHPDoc before sending to tools like VS Code’s Markdown preview or Swagger/OpenAPI generators.
Custom Tag Handlers
Extend PhpdocMd to support custom PHPDoc tags:
$phpdocMd = new PhpdocMd();
$phpdocMd->addTagHandler('custom', function ($tag) {
return "**Custom Tag:** {$tag['description']}";
});
Template-Based Output Combine with Laravel’s Blade for structured documentation:
// resources/views/docs.blade.php
@php
$markdown = PHPDocHelper::toMarkdown($phpdoc);
@endphp
@markdown($markdown)
API Response Documentation Auto-generate Markdown for API responses using Laravel’s route model binding and PHPDoc:
/**
* @return \Illuminate\Http\JsonResponse
* @response {
* "success": true,
* "data": {
* "id": 1,
* "name": "John Doe"
* }
* }
*/
public function show(User $user) { ... }
Nested PHPDoc Parsing
trim() or regex to clean input before parsing.Unsupported PHPDoc Syntax
@mixin, @template) may not render correctly.PhpdocMd or pre-process tags with a regex.Performance with Large Files
app/ directory) can be slow.Markdown Escaping Issues
*, _) in descriptions may break Markdown.htmlspecialchars() or the package’s built-in escaping.Enable Verbose Output
Use the --verbose flag in CLI mode to debug parsing:
vendor/bin/phpdoc-md generate src/ --output docs/ --verbose
Inspect Parsed Tokens Dump the internal token array for debugging:
$phpdocMd = new PhpdocMd();
$tokens = $phpdocMd->tokenize('/**
* @param string $name
*/');
dd($tokens);
Test Edge Cases
parse('') → Should return null or empty string.@param without type/description.Custom Output Formatters
Override PhpdocMd::formatTag() to change how tags are rendered:
$phpdocMd = new PhpdocMd();
$phpdocMd->setFormatter(function ($tag) {
return "[$tag[type]] $tag[description]";
});
Integration with Laravel Scout Use generated Markdown for searchable documentation:
Scout::searchable(function ($model) {
$model->searchableData['docs'] = PHPDocHelper::toMarkdown($model->phpdoc);
});
GitHub/GitLab Wiki Auto-Updates Hook into Laravel’s queue workers to auto-update wiki pages with PHPDoc Markdown:
// app/Console/Commands/UpdateWiki.php
public function handle() {
$markdown = PHPDocHelper::toMarkdown(file_get_contents('src/Class.php'));
$this->updateGitHubWiki($markdown);
}
Laravel Nova Tool Integration Display PHPDoc Markdown in a custom Nova tool for real-time documentation:
// app/Nova/Tools/DocumentationTool.php
public function render() {
$markdown = PHPDocHelper::toMarkdown($this->resource->phpdoc);
return view('nova.documentation-tool', ['markdown' => $markdown]);
}
addTagHandler() to reorder or filter tags.How can I help you explore Laravel packages today?