annotation / larscan
Implement a Laravel scanner that can scan by namespace or path and instantiate classes annotated with specific annotations based on PHP 8.0's annotation feature.
Installs: 2 056
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.0
- illuminate/collections: >=8.0.0
- illuminate/support: >=8.0.0
- reflective/reflection: ^2.0
- rfc/scannable: ^1.0
Provides
- rfc/scannable-implementation: 1.0.0
This package is auto-updated.
Last update: 2025-05-28 14:36:40 UTC
README
Implement a Laravel scanner that can scan by namespace or path and instantiate classes annotated with specific annotations based on PHP 8.0's annotation feature.
Installation
You can install the package via Composer:
composer require annotation/larscan
Usage
Instantiation method
use Annotation\Scannable\Attributes\Scan; use Annotation\Scannable\Attributes\ScanFile; use Annotation\Scannable\Attributes\ScanNamespace; use Annotation\Scannable\Attributes\ScanPath; use Annotation\Scannable\Attributes\ScanPackageNamespace; public function scan(): void { // ScanPackageNamespace $scan = new ScanPackageNamespace(['GuzzleHttp']); // ScanNamespace $scan = new ScanNamespace(['Illuminate\Support\Arr']); $scan = new ScanNamespace(['Illuminate\Support*']); // ScanPath $scan = new ScanPath(__DIR__.'/../Http/'); $scan = new ScanPath(new \RecursiveDirectoryIterator(__DIR__.'/../Http/Controllers')); // ScanFile $scan = new ScanFile(__FILE__); $scan = new ScanFile(new \SplFileInfo(__DIR__ . '/AppServiceProvider.php')); // Scan $scan = new Scan('Illuminate\Support\Arr'); $scan = new Scan(['Illuminate\Support\Arr']); $scan = new Scan(new \ReflectionClass('Illuminate\Support\Arr')); }
Annotation method
Only supports Laravel framework
use Annotation\Scannable\Attributes\Scan; use Annotation\Scannable\Attributes\ScanFile; use Annotation\Scannable\Attributes\ScanNamespace; use Annotation\Scannable\Attributes\ScanPath; use Annotation\Scannable\Attributes\ScanPackageNamespace; use Rfc\Scannable\Contracts\Scannable; #[ScanPackageNamespace(['GuzzleHttp'])] #[ScanNamespace(['Illuminate\Support\Arr'])] #[ScanNamespace(['Illuminate\Support*'])] #[ScanPath(__DIR__.'/../Http/')] #[ScanPath(new \RecursiveDirectoryIterator(__DIR__.'/../Http/Controllers'))] #[ScanFile(__FILE__)] #[ScanFile(new \SplFileInfo(__DIR__ . '/AppServiceProvider.php'))] #[Scan('Illuminate\Support\Arr')] #[Scan(['Illuminate\Support\Arr'])] #[Scan(new \ReflectionClass('Illuminate\Support\Arr'))] class AppServiceProvider extends ServiceProvider implements Scannable { // }
use Annotation\Scannable\Attributes\ScanNamespace; use Annotation\Scannable\Attributes\ScanPackageNamespace; use Annotation\Scannable\Contracts\Scanner; use Annotation\Scannable\Facades\Scan; public function scan(Scanner $scan): void { $namespace = $scan->using(ScanPackageNamespace::class, function (ScanPackageNamespace $scanNamespace) { return $scanNamespace->getReflectionClass(); }); //dump($namespace); $namespace = Scan::using(ScanNamespace::class, function (ScanNamespace $namespace) { return $namespace->getNamespace(); }); //dump($namespace); }
License
Nacosvel Contracts is made available under the MIT License (MIT). Please see License File for more information.