Linux系统: Laravel5.1 文档见解 - HTTP控制器

如果我们将所有的逻辑都写在了route.php上,对我自己而言这相当不优雅,那有什么东西可以解决这个问题。

蒋蒋~是控制器

控制器在我的理解当中,它就像是一个存放你的路由行为的一个容器,当你在路由有一大堆逻辑处理的时候,将这些逻辑写在控制器中,用route.php调用它们。怎么说呢?用下面例子展示一下。

Route::get('testCsrf', function () {
    // do many thing
});
但如果使用控制器的话
Route::get('/testCsrf', 'UserController@doSth');

就可以把所有的逻辑统统塞进这个控制器当中。

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function doSth()
    {
        $users = DB::table('user')->get();
        return view('welcome', ['users' => $users]);
    }
}

 

上面是在说明使用控制器的动机吗,那么下面就要开始说明这个 控制器(controller)的使用


我们需要用到artisan去创建一个控制器(controller)

php artisan make:controller UserController

创建完之后,你可以在app/Http/Controllers 中找到这个控制器

创建好的控制器因为模板所以初始都会有 index, show, create , store, edit, update, destroy 等方法。但你可以完全不用它们,统统删掉。(我就不用代码展示初始的控制器)

创建好了之后,我们需要到app/Http 找到route.php

将这个控制器添加到某个路由当中

Route::get('/test', 'UserController@doSth');

上面我将路由test添加了一个控制器 UserController, 并且调用它的doSth方法。

doSth方法要添加到你的UserController当中才可以调用,不然会报错。


控制器&命名空间

当你的控制器多的时候,你可能想要将它们进行分类管理,那命名空间可以帮到你了,

如何使用呢,我们在 app/Http/Controllers 中创建一个User 的文件夹,然后我们将UserController放进去,

UserController 的命名空间原本是 

namespace app/Http/Controller

我们要将其修改成

namespace app/Http/Controller/User

这样以后我们在route.php当中去使用这个

Route::get('/test', 'User\UserController@doSth');


控制器&中间件

首先我们要明白什么是中间件:

中间件的用途是可以过滤http请求的,我们的身份验证,设备验证其实都可以通过中间件实现的。

如何创建中间件:

php artisan make:middleware UserMiddleware

创建以后可以在 app/Http/Middleware 中看到

那我们如何使用中间件

首先我们要去 app/Http/Kernel.php 中 去 $routemiddleware 中 添加多一个

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'user'=> \App\Http\Middleware\UserMiddleware::class,    // 新添加
    ];

添加之后就可以到route 中使用中间件了(添加到群组当中):

Route::group(['middleware' => 'user'], function () {
    Route::post('/test', 'UserController@doSth');
});

添加给单个路由:

Route::get('admin/profile', ['middleware' => 'user', function () {
    //
}]);

这样每次在访问 /test 的时候都会滴啊用user 中间件, 你想设置标头, 做验证,做其他事情都由你决定。

 public function handle($request, Closure $next)
    {
        if ($request->input('age') <= 20) {    //过滤年龄小于20的
            return redirect('home');
        }

        return $next($request);
    }

中间件有两种行为,是在之前和之后(Http请求):

 public function handle($request, Closure $next)
    {
      // 执行动作(请求之前的动作)
      $response = $next($request)
       // 执行动作(请求之后的动作) 
       return $response;
 }

控制器&隐式控制器

你只需要在route这样使用就可以

Route::controller('users', 'UserController');

在UserController 像下面那样定义即可使用这种隐式控制器:

<?php

namespace App\Http\Controllers;

class UserController extends Controller
{
    /**
     * 响应 GET /users 请求
     */
    public function getIndex()
    {
        //
    }

    /**
     * 响应 GET /users/show/1 请求
     */
    public function getShow($id)
    {
        //
    }

    /**
     * 响应 GET /users/admin-profile 请求
     */
    public function getAdminProfile()
    {
        //
    }

    /**
     * 响应 POST /users/profile 请求
     */
    public function postProfile()
    {
        //
    }
}
以上是我个人的一点点愚见,欢迎纠正,谢谢!

中间件有两种行为,是在控制器之前和之后:

之前:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值