📖 Scenario: You are building a Laravel application that needs to store user-uploaded images in a public directory. To make these images accessible via the web, you need to set up the public disk and create a symbolic link from the storage folder to the public folder.
🎯 Goal: Set up the public disk configuration in Laravel and create a symbolic link so that files stored in storage/app/public are accessible from the public/storage URL.
📋 What You'll Learn
Create the public disk configuration in config/filesystems.php with the correct root and URL
Create a symbolic link from public/storage to storage/app/public using the Artisan command
Verify that the symbolic link exists and points to the correct folder
Explain how to store a file using the public disk
💡 Why This Matters
🌍 Real World
Many web applications need to store user-uploaded files like images or documents and make them accessible via URLs. Setting up the public disk and symbolic links in Laravel is a common way to achieve this.
💼 Career
Understanding Laravel's filesystem and storage linking is essential for backend developers working with file uploads, media management, and serving static assets securely.
Progress0 / 4 steps
1
Configure the public disk in filesystems.php
Open the config/filesystems.php file and add the public disk configuration array inside the disks array exactly as follows: 'public' => ['driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public'].
Laravel
Hint
Look for the disks array and add the public disk with the exact keys and values.
2
Create the symbolic link with Artisan
Run the Artisan command php artisan storage:link in your terminal to create a symbolic link from public/storage to storage/app/public.
Laravel
Hint
Use the Laravel Artisan command storage:link to create the symbolic link.
3
Verify the symbolic link exists
Check that the public/storage folder is a symbolic link pointing to storage/app/public. You can verify this by running ls -l public in your terminal and looking for the storage -> ../storage/app/public link.
Laravel
Hint
Use the ls -l public command to see if the symbolic link storage exists and points correctly.
4
Store a file using the public disk
Write a Laravel code snippet that stores an uploaded file called $request->file('photo') in the public disk using store('photos', 'public') method and saves the returned path in a variable called $path.
Laravel
Hint
Use the store method on the uploaded file with the folder 'photos' and disk 'public'.
Practice
(1/5)
1. What is the main purpose of the public disk in Laravel's filesystem?
easy
A. To store files that should be accessible publicly via the web
B. To store configuration files for the application
C. To keep temporary cache files hidden from users
D. To store database backups securely
Solution
Step 1: Understand the role of the public disk
The public disk is designed to hold files that need to be accessed by users through the web, such as images or documents.
Step 2: Compare with other storage uses
Other disks like local or private are for internal use, not for public access.
Final Answer:
To store files that should be accessible publicly via the web -> Option A
Quick Check:
Public disk = public files [OK]
Hint: Public disk means web-accessible files [OK]
Common Mistakes:
Confusing public disk with private storage
Thinking public disk stores config or cache files
Assuming public disk is for backups
2. Which Artisan command creates a symbolic link from public/storage to storage/app/public?
easy
A. php artisan storage:create-link
B. php artisan make:link
C. php artisan link:storage
D. php artisan storage:link
Solution
Step 1: Recall the correct Artisan command
Laravel uses php artisan storage:link to create the symbolic link for public storage access.
Step 2: Verify other options
Other commands listed are not valid Laravel Artisan commands for this purpose.
Final Answer:
php artisan storage:link -> Option D
Quick Check:
Storage link command = storage:link [OK]
Hint: Use 'storage:link' to create public storage link [OK]
Common Mistakes:
Using incorrect Artisan command names
Confusing 'make' or 'create' with 'storage:link'
Trying to create symbolic links manually without Artisan
3. Given the following code snippet, what will Storage::disk('public')->url('file.txt') return if the symbolic link is correctly created?
use Illuminate\Support\Facades\Storage;
$url = Storage::disk('public')->url('file.txt');
echo $url;
medium
A. storage/app/file.txt
B. http://your-app-url/storage/file.txt
C. /public/storage/file.txt
D. /storage/app/public/file.txt
Solution
Step 1: Understand Storage::url() behavior on public disk
When the symbolic link is created, Storage::url() returns a URL starting with '/storage/' pointing to the public folder.
Step 2: Confirm the full URL format
The method returns a full URL including the app's base URL, so it looks like 'http://your-app-url/storage/file.txt'.
Final Answer:
http://your-app-url/storage/file.txt -> Option B
Quick Check:
Storage::url() returns public URL [OK]
Hint: Storage::url() returns full public URL [OK]
Common Mistakes:
Expecting a file system path instead of URL
Confusing storage path with public URL
Missing the base URL in the returned string
4. You ran php artisan storage:link but your files in storage/app/public are not accessible via the browser. What is the most likely cause?
medium
A. You forgot to clear the application cache
B. The files are not readable by the web server
C. The symbolic link was not created or points to the wrong folder
D. The public disk is not configured in config/filesystems.php
Solution
Step 1: Check the symbolic link existence and target
If the symbolic link is missing or points incorrectly, files won't be accessible via public/storage.
Step 2: Consider other causes but focus on link
While file permissions matter, the most common cause after running the command is a failed or incorrect link creation.
Final Answer:
The symbolic link was not created or points to the wrong folder -> Option C
Quick Check:
Broken or missing link = no public access [OK]
Hint: Check symbolic link path if files not accessible [OK]
Common Mistakes:
Assuming cache clearing fixes symbolic link issues
Ignoring file permissions as a cause
Not verifying the link target folder
5. You want to serve user-uploaded images stored in storage/app/public/images via the web. Which steps correctly set this up in Laravel?
hard
A. Run php artisan storage:link and access images via /storage/images/filename.jpg
B. Move images to public/images and access directly without symbolic links
C. Configure a new disk in config/filesystems.php pointing to public/images and use Storage::url()
D. Create a route to read files from storage/app/public/images and return them manually
Solution
Step 1: Create symbolic link for public storage
Running php artisan storage:link creates a link from public/storage to storage/app/public, making files accessible.
Step 2: Access images via the public URL path
Files inside storage/app/public/images are then accessible at /storage/images/filename.jpg.
Final Answer:
Run php artisan storage:link and access images via /storage/images/filename.jpg -> Option A
Quick Check:
Symbolic link + /storage/ URL = public access [OK]
Hint: Use storage:link and /storage/ URL for public files [OK]
Common Mistakes:
Moving files manually instead of linking
Not using the symbolic link and expecting direct access
Overcomplicating with custom routes unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.