laravel controller

一、准备工作

在routes/web.php中创建一个路由,如下

Route::get('/', function() {
    return view('welcome');
});

Route::get('user/name',function () {
    return 'Name page';
});

当访问网址localhost/user/name时,会出现如下页面

但实际的网站功能不可能这么单调,我们需要更多的返回信息和操作,显然把大量的处理代码写在这里是不合适的,这时候就要用到Controller,路由修改如下

Route::get('/', function() {
    return view('welcome');
});

Route::get('/user/name', 'UserController@name');

这段代码的意思就是,当用户访问 'localhost/user/name' 这个 URL 的时候,调用 UserController 这个控制器的 name 方法来处理请求。也就是说,将原来的闭包函数放到了一个单独的文件中。

我们可以将有共同特征的路由处理函数放到一个共同的控制器中,例如下面这种方式:


Route::get('/', function() {
    return view('welcome');
});

Route::get('/user/name', 'UserController@name');
Route::get('/user/age', 'UserController@age');
Route::get('/user/introduction', 'UserController@introduction');

三条不同的路由的处理函数放在了同一个控制器(用户控制器)的三个不同的方法内。

二、基础控制器

控制器默认目录是app/Http/Controllers,进入应用根目录,或者进入docker workspace容器根目录,使用artisan命令创建UserController如下:

php artisan make:controller UserController

phpstorm中app/Http/Controllers目录下会自动出现UserController,输入如下代码:

/**
 * app\Http\Controllers是控制器的默认目录,所以我们在 routes.php 文件中引入的时候可以直接使用:
 * 'UserController@name'
 */
namespace App\Http\Controllers;

use App\Http\Requests;

class UserController extends Controller {

    public function name(){
        return'Name Page';
    }


    public function age(){
        return'Age Page';
    }

    public function introduction(){
        return'Introduction Page';
    }
}

对应之前的路由

Route::get('/user/age', 'UserController@age');

输入localhost/user/age,会出现以下页面

三、控制器的命名空间

控制器默认有一行代码

namespace App\Http\Controllers;

这行代码就是说明了此控制器的命名空间。

这个目录也是控制器的默认目录,所以我们在 routes.php 文件中引入的时候可以直接使用:

Route::get('/user/age', 'UserController@age');

有一点非常重要,那就是我们在定义控制器路由时,不需要指定完整的控制器命名空间。我们只需要定义「根」命名空间 App\Http\Controllers 之后的部分类名称即可。默认 RouteServiceProvider 会使用路由群组,把 routes.php 文件里所有路由规则都配置了根控制器命名空间。

现在假如你在 App\Http\Controller 目录下新建了一个 User 文件夹来存放 UserControllser.php,你的 routes.php 文件中就需要这么写:

Route::get('/user/name', 'User\UserController@name');

相应的,控制器中的命名空间也要改变:

namespace App\Http\Controllers\User;

现在让我们来删掉刚才的控制器,重新生成一个新的控制器:

rm -rf app/Http/Controllers/UserController.php
php artisan make:controller User/UserController

然后打开工程文件,我们可以看到,在 app\http\Controllers 文件夹下新建了一个 User 文件夹,里边有我们刚刚创建的 UserController.php 文件,打开这个文件:

<?php

namespace App\Http\Controllers\User;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    //
}

注意看命名空间,可以看到,默认生成的命名空间就是App\Http\Controller\User 这就是 artisan 命令为我们做的。

修改控制器:

<?php

namespace App\Http\Controllers\User;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller {

    public function name(){
        return'Name Page';
    }


    public function age(){
        return'Age Page';
    }

    public function introduction(){
        return'Introduction Page';
    }
}

然后对应更改 routes.php 文件:

Route::get('/user/name', 'User\UserController@name');
Route::get('/user/age', 'User\UserController@age');
Route::get('/user/introduction', 'User\UserController@introduction');

然后访问 localhost/user/name 可以看到实现了正确的跳转!

四、控制器的依赖注入

artisan生成的控制器默认有下列几行代码:

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

这几行代码说明了该控制器的依赖注入,简单来说,依赖注入就是将该控制器用到的依赖添加进来。

比如,所有的 Controller 都依赖 基础 Controller.php ,所以需要:

use App\Http\Controllers\Controller;

比如,当我们处理请求的时候,我们引入 Request 类,才可以使用很多 Laravel 提供的方法:

use Illuminate\Http\Request;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值