آموزش ساخت فروشگاه با لاراول ( پروژه محور ) پارت دوم

در پارت اول این آموزش من به شما آموزش دادم که در لاراول چطوری دیتابیس ، مدل ها و مایگریشن های لازم برای فروشگاه خود را بسازید. در این پارت که پارت دوم از آموزش ساخت فروشگاه با لاراول هست به آموزش controllers و route ها میپردازیم .قبل از خواندن این مقاله پیشنهاد میکنم حتما برید و پارت اول این آموزش را کامل بخوانید و موارد را ایجاد کنید.پیاده سازی کنترلرهای فروشگاه لاراولی کنترلرها در فریمورک لاراول در مسیر app/Http/Controllers قرار میگیرند. در ابتدا ما قصد داریم UserController بسازیم. برای ساختن این کنترلر دستور زیر را در ترمینال اجرا کنید : php artisan make:controller UserController سپس کنترلر که ایجاد شده و در مسیر app/Http/Controllers/UserController.php هست را باز کنید و محتویاتش را به شکل زیر تغییر دهید : <?php namespace App\Http\Controllers; use Auth; use App\User; use Validator; use Illuminate\Http\Request; class UserController extends Controller { public function index() // displays all user with orders { $id=auth()->guard('user')->user()->id; return view()->with(User::find($id)->with(['orders'])->get()); } public function login(Request $request) // authenticates the user { $status = 401; $response = ['error' => 'Unauthorised']; if (Auth::attempt($request->only(['email', 'password']))) { return view('user.dashboard'); } return redirect()->back(); } public function register(Request $request) //create user account { $validator = Validator::make($request->all(), [ 'name' => 'required|max:50', 'email' => 'required|email', 'password' => 'required|min:6', 'c_password' => 'required|same:password', ]); if ($validator->fails()) { return redirect()->back()->withErrors(); } $data = $request->only(['name', 'email', 'password']); $data['password'] = bcrypt($data['password']); $user = User::create($data); $user->is_admin = 0; return response()->json([ 'user' => $user, 'token' => $user->createToken('bagisto')->accessToken, ]); } public function show(User $user) // fetch details of users { return response()->json($user); } public function showOrders(User $user) // fetch the orders of the users { return response()->json($user->orders()->with(['product'])->get()); } }سپس به همین شیوه باید ProductController را بسازید و بعد از ساختن این کنترلر محتویات آنرا به شکل زیر عوض کنید : <?php namespace App\Http\Controllers; use App\Product; use Illuminate\Http\Request; class ProductController extends Controller { public function index() // fetch all products { return response()->json(Product::all(),200); } public function store(Request $request) // creates a new product { $product = Product::create([ 'name' => $request->name, 'description' => $request->description, 'quantity' => $request->units, 'price' => $request->price, 'image' => $request->image ]); return response()->json([ 'status' => (bool) $product, 'data' => $product, 'message' => $product ? 'Product Created!' : 'Error Creating Product' ]); } public function show(Product $product) { return response()->json($product,200); } public function uploadFile(Request $request) //upload the product image and fetch the image URL { if($request->hasFile('image')){ $name = time().&quot_&quot.$request->file('image')->getClientOriginalName(); $request->file('image')->move(public_path('images'), $name); } return response()->json(asset(&quotimages/$name&quot),201); } public function update(Request $request, Product $product) //Update the Product { $status = $product->update( $request->only(['name', 'description', 'units', 'price', 'image']) ); return response()->json([ 'status' => $status, 'message' => $status ? 'Product Updated!' : 'Error Updating Product' ]); } public function Quantity(Request $request, Product $product) //Adds the product quantity { $product->quantity = $product->quantity + $request->get('quantity'); $status = $product->save(); return response()->json([ 'status' => $status, 'message' => $status ? 'Units Added!' : 'Error Adding Product Units' ]); } public function destroy(Product $product) //deletes the product { $status = $product->delete(); return response()->json([ 'status' => $status, 'message' => $status ? 'Product Deleted!' : 'Error Deleting Product' ]); } }در نهایت ما کنترلری به اسم OrderController میسازیم و محتویات زیر را درونش کپی میکنیم :‌<?php namespace App\Http\Controllers; use App\Order; use Auth; use Illuminate\Http\Request; class OrderController extends Controller { public function index() // Fetch all Orders { return response()->json(Order::with(['product'])->get(),200); } public function deliverOrder(Order $order) //Set status as Order Delivered { $order->is_delivered = true; $status = $order->save(); return response()->json([ 'status' => $status, 'data' => $order, 'message' => $status ? 'Order Delivered!' : 'Error Delivering Order' ]); } public function store(Request $request) //Creates an Order { $order = Order::create([ 'product_id' => $request->product_id, 'user_id' => Auth::id(), 'quantity' => $request->quantity, 'address' => $request->address ]); return response()->json([ 'status' => (bool) $order, 'data' => $order, 'message' => $order ? 'Order Created!' : 'Error Creating Order' ]); } public function show(Order $order) { return response()->json($order,200); } public function update(Request $request, Order $order) //Updates the Order { $status = $order->update( $request->only(['quantity']) ); return response()->json([ 'status' => $status, 'message' => $status ? 'Order Updated!' : 'Error Updating Order' ]); } public function destroy(Order $order) //Deletes the Order { $status = $order->delete(); return response()->json([ 'status' => $status, 'message' => $status ? 'Order Deleted!' : 'Error Deleting Order' ]); } }در اینجا ما برای هر عملیات کنترلرهای پایه را درست کردیم حالا باید route های لازم برای اپلیکیشن خودمان که یک فروشگاه با لاراول هست را بسازیم.ساخت route های مربوط به فروشگاه لاراولی تمامی route های اپلیکیشن های نوشته شده با لاراول در مسیر routes/api.php قرار میگیرد البته روت های مربوط به API و روت های مربوط به وب درون web.php هستند.کدهای زیر را در فایل api.php خود کپی کنید : <?php use Illuminate\Http\Request; Route::post('login', 'UserController@login'); Route::post('register', 'UserController@register'); Route::get('/products', 'ProductController@index'); Route::post('/upload-file', 'ProductController@uploadFile'); Route::get('/products/{product}', 'ProductController@show'); Route::get('/users','UserController@index'); Route::get('users/{user}','UserController@show'); Route::patch('users/{user}','UserController@update'); Route::get('users/{user}/orders','UserController@showOrders'); Route::patch('products/{product}/units/add','ProductController@updateUnits'); Route::patch('orders/{order}/deliver','OrderController@deliverOrder');بعد از اینکه کنترلرها و route های اصلی خود را ایجاد کردید شما میتوانید از هر فریمورک جاوااسکریپت برای ساختن front end مربوط به فروشگاه لاراولی خود استفاده کنید.با آن میتوانید صفحات احراز هویت بسازید و یک پنل مدیریتی نیز بسازید.همچنین شما میتوانید از پکیج های آماده ی درگاه های پرداخت برای لاراول نیز کمک بگیرید تا پرداخت آنلاین هم در فروشگاه شما اتفاق بیوفتد.در نهایت اگر کارتان تمام شد دستور زیر باعث اجرا شدن فروشگاه شما میشود : php artisan serveدر نهایت با آموزش های این دو پارت شما دانش پایه ای از ساختن یک فروشگاه با فریمورک لاراول را کسب میکنید و هرگز یک فروشگاه حرفه ای و خوب را نمیتوانید با این دو پارت بسازید.اگر نیاز به ساختن فروشگاه اینترنتی پیشرفته با لاراول دارید با دوره ی آموزشی طولانی تری طی کنید زیر مباحث پیچیده تر هست و جزئیات زیاد میباشد.من پیشنهاد میدهم دوره ی اموزش پروژه محور ساخت فروشگاه مشابه دیجیکالا سایت آواسام را تهیه کنید چون من تهیه کردم و بسیار عالی بود و از این دوره هم لاراول را یاد گرفتم و هم نحوه ی ساختن یک اپلیکیشن فروشگاهی مشابه دیجیکالا ...موفق باشید !