1、使用artisan
生成控制器
创建文件目录:
app\Http\Controllers
#默认生成
php artisan make:controller TestController
#初始化生成不包含一些方法
php artisan make:controller TestController --plain
2、控制器与路由模块配合
路由模块请求地址语义化自定义
控制器使用@
连接成员方法, 当前的方法就是请求地址执行的操作
return
在这里可以直接返回给客户端功能类似echo
1. 普通方式请求
路由模块代码:
Route::get('user/test','TestController@show');
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
//
public function show(){
return 'this is show function ';
}
}
2. 带参请求
路由模块代码:
Route::get('user/test/{id}/{name}','TestController@show');
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
//
public function show($id,$name){
return 'show方法获取的id:'.$id.' , name:'.$name;
}
}
3. 别名
路由模块代码:
Route::get('/Admin/User/OtherName/{id}',[
'as'=>'OtherName',
'uses'=>'TestController@OtherName'
]);
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function OtherName($id)
{
//这里使用别名还原完整的URL
return route('OtherName', ['id' => $id]);
}
}
4. 应用中间件
路由模块代码:
//第一种写法
Route::get('/Admin/ConMid',[
'middleware'=>'login',//中间件小写,大写会当成类名使用
'uses'=>'TestController@ConMid'
]);
//第二种写法
Route::get('/Admin/ConMiddle','TestController@ConMid')->middleware('login');
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function ConMid()
{
return '测试控制器应用中间件方法';
}
}
5. 隐式控制器
注意:如果未定义当前方法,会报404页面
路由模块代码:
Route::controller('test','TestController'); //Route::controller('路由模块','对应的控制器');隐式控制器写法
举例:get
方式访问test/add
模块 add
是控制器的方法, 我们可以再控制器模块中使用getAdd(get请求)
/postAdd(oost请求)
调用方法
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function getAdd()
{
return '隐式控制器测试页面';
}
}
6. RESTful控制器
注意:
路由模块代码:
Route::resource('test','TestController'); //Route::resource('路由模块','对应的控制器'); RESTful控制器写法
控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
/**
* url:test
* 请求方式:get
*/
public function index()
{
//
return 'RESTful首页页面index';
}
/**
* url:test/create
* 请求方式:get
*/
public function create()
{
//
return 'RESTful create 添加页面';
}
/**
* url:test
* 请求方式:post
*/
public function store(Request $request)
{
//
return 'RESTful store post 请求首页';
}
/**
* url:test/{id}
* 请求方式:get
*/
public function show($id)
{
//
return 'RESTful show 请求的id:' . $id;
}
/**
* url:test/{id}/edit
* 请求方式:get
*/
public function edit($id)
{
//
return 'RESTful edit 请求的id:' . $id;
}
/**
* url:test/{id}
* 请求方式:put表单/patch
* 隐藏域value='PUT'
*/
public function update(Request $request, $id)
{
return 'RESTful 表单update请求的id:' . $id;
}
/**
* url:test/{id}
* 请求方式:delete
* 隐藏域value='DELETE'
*/
public function destroy($id)
{
//
return 'RESTful 表单destroy请求的id:' . $id;
}
}
隐藏域知识点与本文无关:csrf_field() 表单隐藏域通过全局验证中间件处理POST请求, 不要可以注释kernel.php ->verifycsrftoken中间件。否则需要加上csrf_field() 方法才能不报错