路由器的部分会指向Controller,下面学习Controller相关知识
artisan命令自动生成controller文件
php artisan make:controller /Contro/Foo1Controller
在路由中添加中间件
public function __construct()
{
//添加中间件
// $this->middleware('auth');
//范围限定
$this->middleware('auth')->only('foo1');//只有foo1调用时会使用auth认证
// $this->middleware('auth')->only('foo2');//除了foo2之外的方法都会使用auth认证
}
public function foo1()
{
return 'hello Controller';
}
public function foo2()
{
return 'hello foo2';
}
这样访问foo1时如果未登陆时内部代码不会执行起来
资源控制器
文件类型的CURD操作可以通过artisan命令生成对应controller的方法
php artisan make:controller /Contro/Foo2Controller --resource
//没有create和edit方法 前端跳转页 后端不需要处理
php artisan make:controller /Contro/Foo2Controller --apiresource
尾部多了--resource
内部的一些方法以及自动定义
<?php
namespace App\Http\Controllers\Contro;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class Foo2Controller extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
创建好控制器后,我们只需要在路由中写上对应的控制器指向即可:
Route::resource('foo2','Foo2Controller');
下面列举出对应URI调用接口路径:
(图片来源:https://learnku.com/docs/laravel/6.x/controllers/5138)
部分资源路由:
Route::resource('foo2', 'foo2Controller')->only([
'index', 'show'
]);//就算controller定义了create方法 路由调用时也不会进入该控制器
Route::resource('foo2', 'foo2Controller')->except([
'create', 'store', 'update', 'destroy'
]);
控制器&路由传参
//Route中传递id参数给控制器Foo3Controller的foo1方法
Route::get('foo3/{id}', 'Foo3Controller@foo1');
//控制器中
function foo1(Request $request, $id)
{
echo "$id";
}
路由缓存
闭包类型的路由不会进行缓存,只会缓存控制器类的缓存可以通过
//查看当前存在路由
php artisan route:list
清除路由缓存
php artisan route:clear