adamgoose / laravel-annotations
Requires
- php: >=5.4.0
- doctrine/annotations: ~1.0
- illuminate/console: ~5.0
- illuminate/filesystem: ~5.0
- illuminate/support: ~5.0
- symfony/console: 2.6.*
- symfony/finder: 2.6.*
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2022-02-01 12:43:23 UTC
README
推荐使用 https://github.com/LaravelCollective/annotations。请更新您的 composer.json 文件。
Laravel 框架注解
在 Laravel 5.0 的早期开发阶段,Laravel 5.0 准备支持路由和事件注解。关于此事有大量的 争议 和 讨论,@taylorotwell 决定从核心中移除注解支持,并将 Laravel 注解支持提取到一个第三方包中。这一决定的成果就是本包由一个 Laravel 注解的狂热粉丝维护。
安装
注意。如果您已将顶级命名空间更改为类似 'MyCompany' 的名称,则应使用新的命名空间而不是 'App'。
首先,通过 Composer 安装此包。编辑您项目的 composer.json
文件以要求 adamgoose/laravel-annotations
。
"require": {
"adamgoose/laravel-annotations": "~5.0"
}
然后,从终端更新 Composer
composer update
Composer 完成后,您需要在 app/Providers/AnnotationsServiceProvider.php
中创建一个 Service Provider。
<?php namespace App\Providers; use Adamgoose\AnnotationsServiceProvider as ServiceProvider; class AnnotationsServiceProvider extends ServiceProvider { /** * The classes to scan for event annotations. * * @var array */ protected $scanEvents = []; /** * The classes to scan for route annotations. * * @var array */ protected $scanRoutes = []; /** * Determines if we will auto-scan in the local environment. * * @var bool */ protected $scanWhenLocal = false; }
最后,将您的新提供者添加到 config/app.php
的 providers
数组中
'providers' => [ // ... 'App\Providers\AnnotationsServiceProvider', // ... ];
使用
设置扫描
通过编辑您的 AnnotationsServiceProvider
中的 protected $scanEvents
和 protected $scanRoutes
来配置对控制器进行注解扫描。例如,如果您想扫描 App\Handlers\Events\MailHandler
的事件注解,您可以将其添加到 protected $scanEvents
中,如下所示
/** * The classes to scan for event annotations. * * @var array */ protected $scanEvents = [ 'App\Handlers\Events\MailHandler', ];
同样,如果您想扫描 App\Http\Controllers\HomeController
的路由注解,您可以将其添加到 protected $scanRoutes
中,如下所示
/** * The classes to scan for route annotations. * * @var array */ protected $scanRoutes = [ 'App\Http\Controllers\HomeController', ];
您可以通过使用 php artisan event:scan
和 php artisan route:scan
分别手动扫描事件处理程序和控制器,或者通过设置 protected $scanWhenLocal = true
自动扫描。
事件注解
@Hears
@Hears
注解用于为特定事件注册事件监听器。任何带有 @Hears("SomeEventName")
注解的方法都会注册一个事件监听器,当 SomeEventName
事件被触发时,将调用该方法。
<?php namespace App\Handlers\Events; use App\User; class MailHandler { /** * Send welcome email to User * @Hears("UserWasRegistered") */ public function sendWelcomeEmail(User $user) { // send welcome email to $user } }
路由注解
@Get
@Get
注解用于注册 HTTP GET 请求的路由。
<?php namespace App\Http\Controllers; class HomeController { /** * Show the Index Page * @Get("/") */ public function getIndex() { return view('index'); } }
您还可以设置路由名称。
/** * @Get("/", as="index") */
... 或者中间件。
/** * @Get("/", middleware="guest") */
... 或者两者都使用。
/** * @Get("/", as="index", middleware="guest") */
以下是一个使用所有可用的参数进行 @Get
注解的例子
/** * @Get("/profiles/{id}", as="profiles.show", middleware="guest", domain="foo.com", where={"id": "[0-9]+"}) */
@Post, @Options, @Put, @Patch, @Delete
@Post
,@Options
,@Put
,@Patch
和 @Delete
注解与 @Get
注解语法完全相同,区别在于它将为相应的 HTTP 动词注册路由,而不是 GET 动词。
@Middleware
除了在路由定义标签(如 @Get
,@Post
等)中内联定义中间件之外,还可以单独使用 @Middleware
标签。它既适用于单个方法
/** * Show the Login Page * * @Get("login") * @Middleware("guest") */ public function login() { return view('index'); }
也可以应用于整个控制器,使用与 Laravel 其他地方相同的 only/exclude 过滤语法
/** * @Middleware("guest", except={"logout"}) */ class AuthController extends Controller { /** * Log the user out. * * @Get("logout", as="logout") * @Middleware("auth") * * @return Response */ public function logout() { $this->auth->logout(); return redirect( route('login') ); } }