HTTP 控制器

更新时间: 2019-08-01 16:47

简介

为了替代把所有的请求处理逻辑都定义在 routes.php 路由文件中,你或许想要使用控制来组织这些行为。控制器可以把相关的请求处理逻辑整合为一个控制器类。控制器类文件被存储在 app/Http/Controllers 目录下。

基础控制器

这里有一个基础控制器的示例。所有 Lumen 的控制器都应该继承 Lumen 安装时内置的默认的控制器基类:

<?php

namespace App\Http\Controllers;

use App\User;

class UserController extends Controller
{
    /**
     * 获取指定 ID 的用户
     *
     * @param    int  $id
     * @return  Response
     */
    public function show($id)
    {
        return User::findOrFail($id);
    }
}

我们可以像下面这样将路由指向控制器的方法:

$router->get('user/{id}', 'UserController@ show');

现在,当请求匹配到这个特定的 URI 时, UserController 类中的 show 方法就会执行。当然,路由的参数也同样传递给了这个方法。

控制器和命名空间

有一点非常重要,那就是我们要注意在定义控制器路由时,不需要指定完整的控制器命名空间。我们只需定义" 根 ".命名空间 App\Http\Controllers 之后的类名部分。默认情况下, bootstrap/app.php 文件在加载 routes.php 时已经把所有路由规则都配置了根控制器命名空间。

如果你选择在 App\Http\Controllers 目录内层使用 PHP 命名空间嵌套或组织控制器,只要使用相对于 App\Http\Controllers 根命名空间的特定类名称即可。因此,如果你的控制器类全名是 App\Http\Controllers\Photos\AdminController,那么你应该注册一个路由,如下所示:

$router->get('foo', 'Photos\AdminController@ method');

命名控制器路由

像闭包路由那样,你可以给控制器路由指定一个名称:

$router->get('foo', ['uses' => 'FooController@ method', 'as' => 'name']);

你也可以使用 route 辅助函数,来生成指向控制器路由的 URL:

$url = route('name');

控制器中间件

中间件 可通过如下方式分配到路由中:

$router->get('profile', [
    'middleware' => 'auth',
    'uses' => 'UserController@ showProfile'
]);

然而,更方便的方式是在控制器的构造方法里面使用 middleware 方法指定中间件。你甚至可以限制中间件只应用于该控制器类的某些方法:

class UserController extends Controller
{
    /**
     * 实例化一个新的 UserController 实例.
     *
     * @return  void
     */
    public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log', ['only' => [
            'fooAction',
            'barAction',
        ]]);

        $this->middleware('subscribed', ['except' => [
            'fooAction',
            'barAction',
        ]]);
    }
}

依赖注入与控制器

构造器注入

Lumen 使用「 服务容器 」来解析所有的控制器的依赖注入。因此,你可以在控制器的构造函数中使用类型提示需要的任何依赖。这些依赖将会自动的解析并注入到控制器实例中:

<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
    /**
     * 用户存储库实例
     */
    protected $users;

    /**
     * 新建一个控制器实例
     *
     * @param    UserRepository  $users
     * @return  void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
}

方法注入

除了构造器注入以外,你也可以在你的控制器方法中使用类型提示依赖项。例如,在某个方法中添加 Illuminate\Http\Request 实例的类型提示:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 保存一个新用户
     *
     * @param    Request  $request
     * @return  Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }
}

如果你想在控制器里获取路由参数,只需要在路由之后列出参数即可。例如,你的路由这样来定义:

$router->put('user/{id}', 'UserController@ update');

你可以像下面的例子一样定义你的控制器,用类型提示注入 Illuminate\Http\Request 类和你的路由参数 id

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 更新指定用户。
     *
     * @param    Request  $request
     * @param    string  $id
     * @return  Response
     */
    public function update(Request $request, $id)
    {
        //
    }
}

查看更多 Laravel 中文文档 信息

DOM Scripting

DOM Scripting

Jeremy Keith / friendsofED / 2010-12 / GBP 27.50

There are three main technologies married together to create usable, standards-compliant web designs: XHTML for data structure, Cascading Style Sheets for styling your data, and JavaScript for adding ......一起来看看 《DOM Scripting》 这本书的介绍吧!

MD5 加密

MD5 加密

MD5 加密工具

RGB CMYK 转换工具

RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具

HSV CMYK 转换工具

HSV CMYK互换工具