路由

  • 写在 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();