Laravel8入门教程(三)控制器与路由的绑定

        控制器用于将相关的 HTTP 请求封装到一个类中进行处理,如同TP6一样,默认情况下,控制器没有分组,默认都存放在 app/Http/Controllers 目录下。

1、基本控制器

 创建一基本控制器()

1、创建普通控制器  默认在/app/Http/Controllers/目录下生成
# php artisan make:controller IndexController

2、创建admin应用下的控制器
# php artisan make:controller admin/ArticleController         
此命令在/app/Http/Controllers/下生成一个admin目录并,并创建了ArticleController.php控制器文件

生成的控制器位于 app/Http/Controllers 目录下

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class IndexController extends Controller
{

}

2、资源控制器

1、创建资源控制器
# php artisan make:controller  admin/ArticleController --resource
2、创建资源控制器,并指定模型
# php artisan make:controller  admin/ArticleController --resource --model=Article   

生成的控制器包含了index、create、store等七个方法,资源控制器处理的动作:

请求方式URI路径控制器方法路由名称
GET/admin/articleindexposts.index
GET/posts/createcreateposts.create
POST/postsstoreposts.store
GET/posts/{post}showposts.show
GET/posts/{post}/editeditposts.edit
PUT/PATCH/posts/{post}updateposts.update
DELETE/posts/{post}destroyposts.destroy

对应的路由可以设置为如下:

Route::get('admin/article/index', [ArticleController::class, 'index']);
Route::get('admin/article/create', [ArticleController::class, 'create']);
Route::post('admin/article/store', [ArticleController::class, 'store']);
Route::get('admin/article/show/{id}', [ArticleController::class, 'show']);
Route::get('admin/article/edit/{id}', [ArticleController::class, 'edit']);
Route::put('admin/article/update/{id}', [ArticleController::class, 'update']);
Route::delete('admin/article/destroy/{id}', [ArticleController::class, 'destroy']);

3、路由绑定控制器

这里的绑定方式与Laravel7.x以前的版本不同。

在Laravel7.x中路由指向控制器使用的是如下: 

Route::get('article/index', 'ArticleController@index');
Route::get('article/create', 'ArticleController@create');
Route::post('article/store', 'ArticleController@store');

而从Laravel8开始使用标准的PHP调用语法
如要设置./Controllers/IndexController.php控制器下index()方法的路由

//首先引入
use App\Http\Controllers\IndexController;

//创建路由 http://blog.laravel8.cn/index
Route::get('index', [IndexController::class, 'index']);

//绑定IndexController控制器下的index()方法
//创建类似于TP中的默认控制器、默认方法
// http://blog.laravel8.cn/
Route::get('/', [IndexController::class, 'index']);
//http://blog.laravel8.cn/index
Route::get('index', [IndexController::class, 'index']);
//http://blog.laravel8.cn/index/index
Route::get('index/index', [IndexController::class, 'index']);

如果不引入也可以这样写

Route::get('/article/index', [\App\Http\Controllers\ArticleController::class, 'index']);

4、控制器视图模板载入

public function index()
    {
        $username = '暮云归';
        return view('index',  ['username' => $username]);
    }

使用 view()助手函数来加载模板。 与TP不同的是,这里第一参数必须指定, 如这里的index 表示加载位于/resources/views/目录下的index.blade.php模板。
如果给定为  return view('index/index',  ['username' => $username]); 则便是为/resources/views/index/目录下的index.blade.php模板。

5、仿TP的控制器结构优化

Laravel默认没有对控制器进行分组,所有的控制器都在/app/Http/Controllers/目录下,项目越来越庞大后不利于管理。因此我们采用TP的目录结构:

app
├─Http 
│  ├─Controllers  控制器目录
│  │  ├─admin  后台Admin模块
│  │  │  ├─IndexController.php 后台首页控制器
│  │  │  ├─CategoryController.php 分类管理控制器
│  │  ├─home   前台Home模块
│  │  │  ├─IndexController.php 前台首页控制器
│  │  │  ├─ArticleController.php 文章展示控制器
│  │  ├─user   用户User模块
│  │  │  ├─IndexController.php 用户首页控制器
│  │  │  ├─TagController.php 标签管理控制器

对应的视图文件如

namespace App\Http\Controllers\admin;

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

class IndexController extends Controller
{
    //
    public function index()
    {
        $username = '暮云归--admin模块下Index控制器下index()';
        return view('admin.index.index',  ['username' => $username]);
    }

    public function mytest()
    {
        $username = '暮云归--admin模块下Index控制器下mytest()';
        return view('admin.index.mytest',  ['username' => $username]);
    }
}


web.php下路由设置

...
use App\Http\Controllers\admin\IndexController as AdminIndexController;


//http://blog.laravel8.cn/admin/index/index
Route::get('admin/index/index', [AdminIndexController::class, 'index']);
//http://blog.laravel8.cn/admin/index/mytest
Route::get('admin/index/mytest', [AdminIndexController::class, 'mytest']);
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值