adamgoose/laravel-annotations

该包已被弃用且不再维护。作者建议使用 laravelcollective/annotations 包。

为 Laravel 框架提供的路由注解。

dev-develop 2015-02-04 20:51 UTC

This package is auto-updated.

Last update: 2022-02-01 12:43:23 UTC


README

推荐使用 https://github.com/LaravelCollective/annotations。请更新您的 composer.json 文件。

Laravel 框架注解

Build Status Total Downloads Latest Stable Version Latest Unstable Version License

在 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.phpproviders 数组中

  'providers' => [
    // ...
    'App\Providers\AnnotationsServiceProvider',
    // ...
  ];

使用

设置扫描

通过编辑您的 AnnotationsServiceProvider 中的 protected $scanEventsprotected $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:scanphp 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') );
  }

}