Laravel 9 Upload Image and Display
How to install laravel 9
https://tutorial101.blogspot.com/2022/02/how-to-install-laravel-9.html
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Create Model and Migration
C:\xampp\htdocs\laravel\laravelproject>php artisan make:model Product -m
A new file named Product.php will be created in the app directory and database/migrations directory to generate the table in our database
app/Models/Product.php
//app/Models/Product.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasFactory; protected $fillable = [ 'name', 'image', 'description' ]; }laravelproject\database\migrations\create_products_table.php
//laravelproject\database\migrations\create_products_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('image'); $table->text('description'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('products'); } };Database Migration
php artisan migrate
C:\xampp\htdocs\laravel\laravelproject>php artisan migrate
Migration table created successfully.
check database table
Create Controller and Request
C:\xampp\htdocs\laravel\laravelproject>php artisan make:controller ProductController -r
laravelproject\app\Http\Controllers\ProductController.php
//laravelproject\app\Http\Controllers\ProductController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Product; use App\Http\Requests\ProductStoreRequest; use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; class ProductController extends Controller { public function index() { // All Product $products = Product::all(); // Return Json Response return response()->json([ 'products' => $products ],200); } public function store(ProductStoreRequest $request) { try { $imageName = Str::random(32).".".$request->image->getClientOriginalExtension(); // Create Product Product::create([ 'name' => $request->name, 'image' => $imageName, 'description' => $request->description ]); // Save Image in Storage folder Storage::disk('public')->put($imageName, file_get_contents($request->image)); // Return Json Response return response()->json([ 'message' => "Product successfully created." ],200); } catch (\Exception $e) { // Return Json Response return response()->json([ 'message' => "Something went really wrong!" ],500); } } public function show($id) { // Product Detail $product = Product::find($id); if(!$product){ return response()->json([ 'message'=>'Product Not Found.' ],404); } // Return Json Response return response()->json([ 'product' => $product ],200); } public function update(ProductStoreRequest $request, $id) { try { // Find product $product = Product::find($id); if(!$product){ return response()->json([ 'message'=>'Product Not Found.' ],404); } $product->name = $request->name; $product->description = $request->description; if($request->image) { // Public storage $storage = Storage::disk('public'); // Old iamge delete if($storage->exists($product->image)) $storage->delete($product->image); // Image name $imageName = Str::random(32).".".$request->image->getClientOriginalExtension(); $product->image = $imageName; // Image save in public folder $storage->put($imageName, file_get_contents($request->image)); } // Update Product $product->save(); // Return Json Response return response()->json([ 'message' => "Product successfully updated." ],200); } catch (\Exception $e) { // Return Json Response return response()->json([ 'message' => "Something went really wrong!" ],500); } } public function destroy($id) { // Detail $product = Product::find($id); if(!$product){ return response()->json([ 'message'=>'Product Not Found.' ],404); } // Public storage $storage = Storage::disk('public'); // Iamge delete if($storage->exists($product->image)) $storage->delete($product->image); // Delete Product $product->delete(); // Return Json Response return response()->json([ 'message' => "Product successfully deleted." ],200); } }Next, create a Request
C:\xampp\htdocs\laravel\laravelproject>php artisan make:request ProductStoreRequest
laravelproject\app\Http\Requests\ProductStoreRequest.php
//laravelproject\app\Http\Requests\ProductStoreRequest.php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ProductStoreRequest extends FormRequest { public function authorize() { //return false; return true; } public function rules() { if(request()->isMethod('post')) { return [ 'name' => 'required|string|max:258', 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'description' => 'required|string' ]; } else { return [ 'name' => 'required|string|max:258', 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'description' => 'required|string' ]; } } public function messages() { if(request()->isMethod('post')) { return [ 'name.required' => 'Name is required!', 'image.required' => 'Image is required!', 'description.required' => 'Descritpion is required!' ]; } else { return [ 'name.required' => 'Name is required!', 'description.required' => 'Descritpion is required!' ]; } } }Routes
All API requests will need the header Accept: application/json.
open routes/api.php and update the following code
laravelproject\routes\api.php
//laravelproject\routes\api.php <?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProductController; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); Route::get('products', [ProductController::class, 'index']); Route::get('products/{id}', [ProductController::class, 'show']); Route::post('products', [ProductController::class, 'store']); Route::put('products/{id}', [ProductController::class, 'update']); Route::delete('products/{id}', [ProductController::class, 'destroy']); //resource route //Route::resource('products', ProductController::class);generate symbolic links C:\xampp\htdocs\laravel\laravelproject>php artisan storage:link
Run C:\xampp\htdocs\laravel\laravelproject>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
open postman new request
GET api/products Index All products return.
GET : http://127.0.0.1:8000/api/products
GET api/products/{id} Show Detail of a particular post by ID.
GET : http://127.0.0.1:8000/api/products/1
POST api/products Store Create a new product.
POST : http://127.0.0.1:8000/api/products
body
key value
name Iphone 13
image iphone.jpg = file
description product description
PUT api/products/{id} Update Update a particular product by ID.
POST : http://127.0.0.1:8000/api/products/1
body
key value
_method PUT
name Iphone 13 updated
image iphone.jpg = file
description product description updated
DELETE api/products/{id} Destroy Delete a particular product by ID.
DELETE : http://127.0.0.1:8000/api/products/1