上一篇
🚀 Laravel GET方法与None参数全攻略 🚀
路由定义
在routes/web.php
或routes/api.php
中定义GET路由:
Route::get('/users', 'UserController@index'); // 基本GET请求 Route::get('/post/{id}', 'PostController@show'); // 带必填参数 Route::get('/page/{page?}', 'PageController@view'); // 可选参数(带?)
控制器接收参数
通过依赖注入获取请求对象:
use Illuminate\Http\Request; class UserController extends Controller { public function index(Request $request) { $name = $request->input('name'); // 获取GET参数 $page = $request->get('page', 1); // 默认值1 return view('users', compact('name', 'page')); } }
可选参数路由
定义带的参数,未提供时自动赋默认值:
Route::get('/search/{keyword?}', 'SearchController@results');
控制器中:
public function results($keyword = 'default') { return 'Searching for: ' . $keyword; }
参数验证与默认值
使用has()
检查参数是否存在,或get()
设置默认值:
if ($request->has('sort')) { $sort = $request->input('sort'); } else { $sort = 'created_at'; // 默认排序 }
中间件过滤空请求
创建中间件检查请求有效性:
public function handle(Request $request, Closure $next) { if (!$request->filled('key')) { abort(422, 'Missing required parameter'); } return $next($request); }
版本控制与参数限制
Route::prefix('v1')->group(function () { Route::get('/items', 'API\V1\ItemController@index') ->where('category', '[a-z]+'); // 限制参数格式 });
分页与过滤
public function index(Request $request) { $perPage = $request->get('per_page', 15); return Item::paginate($perPage); }
错误处理
使用HttpResponseException
返回统一错误格式:
if (!$request->has('api_token')) { throw new HttpResponseException(response()->json([ 'error' => 'Unauthorized', ], 401)); }
Q1: GET请求报错MethodNotAllowedHttpException
✅ 检查路由是否支持GET方法,使用Route::match(['get', 'post'], ...)
或Route::any()
。
Q2: 参数未传递导致错误
✅ 使用$request->get('param', 'default')
或$request->filled('param')
进行安全处理。
Q3: 路由参数包含特殊字符
✅ 使用正则限制参数格式:
Route::get('/tag/{slug}', 'TagController@show') ->where('slug', '[A-Za-z0-9-_]+');
// 路由定义 Route::get('/api/products', 'ProductController@list') ->name('api.products.list'); // 控制器逻辑 public function list(Request $request) { $category = $request->get('category', 'all'); $products = Product::when($category !== 'all', function ($query) use ($category) { $query->where('category', $category); })->paginate(10); return response()->json([ 'data' => $products, 'meta' => [ 'page' => $request->get('page', 1), 'per_page' => 10, ], ]); }
💡 提示:结合Laravel 10+的Route::current()
可动态获取路由参数,搭配$request->validated()
实现无缝验证!
本文由 业务大全 于2025-08-25发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://xdh.7tqx.com/wenda/730316.html
发表评论