Table Of Contents
The Short Answer
Think of input()
as the universal data grabber - it checks everywhere (POST body, JSON, query params). Meanwhile, get()
is the picky one - it only looks at query parameters in your URL.
Here's the breakdown:
// request()->input() - Gets data from anywhere in the request
$name = request()->input('name'); // From POST/PUT body or query string
$email = request()->input('user.email'); // Supports dot notation for nested data
$tags = request()->input('tags', []); // With default value
// request()->get() - Gets data from query parameters only
$page = request()->get('page'); // Only from ?page=1 in URL
$search = request()->get('search', ''); // With default value
Key differences in practice:
// POST /api/users?debug=true
// Body: {"name": "John", "email": "john@example.com"}
public function store(Request $request)
{
// input() checks both body AND query parameters
$name = $request->input('name'); // "John" (from body)
$debug = $request->input('debug'); // "true" (from query)
// get() only checks query parameters
$page = $request->get('page'); // null (not in query)
$debug = $request->get('debug'); // "true" (from query)
$name = $request->get('name'); // null (not in query)
// Specific methods for clarity
$allInput = $request->all(); // Everything (body + query)
$queryOnly = $request->query(); // Query parameters only
$bodyOnly = $request->post(); // POST body only (if form data)
}
When to Use Which?
Use input()
when: You want flexibility - whether data comes from a form, JSON payload, or URL doesn't matter.
Use get()
when: You specifically need URL parameters (pagination, filters, debug flags).
Best practices and recommendations:
// Use input() for API endpoints (handles JSON + query params)
public function apiMethod(Request $request)
{
$userId = $request->input('user_id'); // Flexible - works with JSON or form
$filters = $request->input('filters', []); // Good for complex data
}
// Use get() for pagination, filtering, debugging flags
public function index(Request $request)
{
$page = $request->get('page', 1); // Clearly from URL
$perPage = $request->get('per_page', 15); // URL parameters
$debug = $request->get('debug', false); // Debug flags
}
// Combine both when needed
public function search(Request $request)
{
$query = $request->input('q'); // Search term (flexible)
$page = $request->get('page', 1); // Pagination (URL only)
$category = $request->input('category'); // Filter (flexible)
}
// Alternative specific methods
$json = $request->json('key'); // JSON data only
$header = $request->header('Authorization'); // Headers
$file = $request->file('upload'); // Files
$cookie = $request->cookie('session'); // Cookies
Related: Laravel Collections: Beyond Basic Array Operations | Laravel Events and Listeners: Building Decoupled Applications | Building Multi-tenant Applications with Laravel: A Comprehensive Guide | Laravel Request Lifecycle: Complete Guide with Examples 2025 | Level Up Your Laravel Validation: Advanced Tips & Tricks
Add Comment
No comments yet. Be the first to comment!