路由
- 写在
web.php
里面的路由有CSRF保护,可以在app/Http/Middleware/VerifyCsrfToken.php
中排除掉
protected $except = [
'/wx/api/sign/msg_push','openapi/*'
];
- 如果需要全局取消可以在
\app\Http\Kernel.php
中去掉\App\Http\Middleware\VerifyCsrfToken::class,
中间件
路由基本写法
// 路由方法
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::match(['get','post'],'$url',$callback);
// 参数必选和可选,相当于给函数传递参数
Route::any('test/{id}', 'TestController@index');
在控制器中:public function(Request $request, $id){}
Route::any('test/{id?}', 'TestController@index');
路由到页面
// 路由到页面
Route::any('/', function () {
return view('welcome');
});
路由到控制器
// 路由到控制器,命名空间为 App\Http\Controllers
Route::any('test', 'TestController@index');
// 路由到控制器,带命名空间的
Route::any('/wx/api/sign/msg_push', '\App\Http\Controllers\Wx\BaseController@signMsgPush');
命名空间路由+前缀
// 命名空间路由+前缀
Route::namespace('Home')->prefix('home')->group(function () {
Route::get('/index', 'IndexController@index');
// 简单的路由分组,可以嵌套写在命名空间路由里面,也可单独使用
Route::prefix('/db')->group(function (){
Route::get('/Create', 'TestModelController@index');
Route::get('/Delete', 'TestDbController@d');
Route::get('/Update', 'TestDbController@u');
Route::get('/Retrieve', 'TestDbController@r');
});
});
命名空间路由+前缀+中间件
// 命名空间路由+前缀+中间件,多个中间件按照先后顺序执行
Route::namespace('Wx')->prefix('wx')->middleware(['check.openid'])->group(function () {
Route::get('/index/{id}', 'IndexController@index');
});
// 可以多层嵌套中间件,执行顺序是:outer 、inner 、array1 、array2
Route::group(['middleware' => 'outer'], function () {
Route::group(['middleware' => 'inner'], function () {
Route::group(['middleware' => ['array1', 'array2', 'auth:api']], function () {
Route::get('test', function () {
return;
});
});
});
});
项目上线时,使用路由缓存
php artisan route:cache
清除路由缓存:php artisan route:clear
Request用法
// url: http://xx.com/aa/bb
Request::url();
// 路径: /aa/bb
Request::path();
// 获取请求 Uri: /aa/bb/?c=d
Request::getRequestUri();
// 返回用户的 IP
Request::ip();
// 获取 Uri: http://xx.com/aa/bb/?c=d
Request::getUri();
// 获取查询字符串: c=d
Request::getQueryString();
// 获取请求端口 (例如 80, 443 等等)
Request::getPort();
// 判断当前请求的 URI 是否可被匹配
Request::is('foo/*');
// 获取 URI 的分段值 (索引从 1 开始)
Request::segment(1);
// 从请求中取回头部信息
Request::header('Content-Type');
// 从请求中取回服务器变量
Request::server('PATH_INFO');
// 判断请求是否是 AJAX 请求
Request::ajax();
// 判断请求是否使用 HTTPS
Request::secure();
// 获取请求方法
Request::method();
// 判断请求方法是否是指定类型的
Request::isMethod('post');
// 获取原始的 POST 数据
Request::instance()->getContent();
// 获取请求要求返回的格式
Request::format();
// 判断 HTTP Content-Type 头部信息是否包含 */json
Request::isJson();
// 判断 HTTP Accept 头部信息是否为 application/json
Request::wantsJson();