از ده سال گذشته اینترنت به قدر خیلی زیاد و با سرعت بالایی پیشرفت کرده و یکی از مهم ترین کاربردهای اینترنت تجارت الکترونیک ( خرید فروش آنلاین ) است.
فناوری در راس این پیشرفت هاست و توسعه دهندگان درسرتاسر جهان با استفاده از زبان های برنامه نویسی همچون PHP JAVA, Python, MEAN, Ruby On Rails و ... سعی در آسانتر کردن و بهتر کردن تجارت آنلاین هستند.
محبوب ترین ابزاری که برای ساخت فروشگاه ها استفاده میشود ، از الگوی mvc استفاده میکند و متن باز هست فریمورکی به اسم لاراول ( Laravel ) که در سال ۲۰۱۱ توسط تیلور اتول ساخته شده است.
فریمورک لاراول با هدف آسان سازی توسعه ی وب و ایجاد ابزارهایی برای کارهای تکراری در توسعه وب مانند routing authentication, sessions و caching به محبوبیت خیلی زیادی در بین توسعه دهندگان وب رسید.
در این آموزش من قصد دارم به شما یاد بدم که چطور یک فروشگاه را با استفاده از فریمورک لاراول بالا بیاورید و سپس از فریمورک های جاوااسکریپت مانند Vue.js, React, Node.js, Angular JS و Backbone.js برای ظاهر آن استفاده کنید.
باید سطح دسترسی کاربران را مشخص کنیم در فروشگاه لاراولی ما دو نوع کاربر داریم که به ترتیب زیر هستند :
ما باید کامپوننت های مختلف فروشگاه اینترنتی خود را مشخص کنیم . علاوه بر کاربران که همان مشتریان سیستم فروشگاهی هستند ما باید محصولات را هم ذخیره کنیم همچنین بخشی هم برای ذخیره سفارشات باشد.
ما میتوانیم کامپوننت های اولیه فروشگاه خود را به شکل زیر بسازیم ( ابتدا نام کامپوننت یا موجودیت را میبینید سپس با علامت فلش فیلد های لازم را مشخص کردیم ) :
User > username, password, role
Product > name, description, price, quantity, image
Order > product, user, stock, delivery_status, address
فریمورک لاراول به شما این امکان را میدهد که برای هر عملیات یا هر مسیری که در route تعریف میکنید یک کنترلر داشته باشید.
برای انجام هر عمل خاصی در اپلیکیشن لاراولی میتوانید یک متود در کنترلر مد نظر ایجاد کنید. در زیر عملیات های مختلف با نام کنترلر آنها را میبینید :
برای ساختن یک اپلیکیشن جدید با فریمورک لاراول کد زیر را در ترمینال یا cmd خود اجرا کنید:
$ laravel new shop
البته شما میتوانید از دستور زیر نیز برای نصب یک نسخه ی جدید لاراول استفاده کنید
composer create-project laravel/laravel shop
به درون پوشه shop بروید اینجا مسیر اصلی پروژه ی لاراولی شما است و برای اجرای دستورات ترمینالی باید درون این پوشه باشید.
در این پروژه ما از MySQL برای ساختن دیتابیس ( پایگاه داده ) فروشگاه خودمان استفاده خواهیم کرد. یک دیتابیس جدید بسازید و سپس فایل .env را باز کنید که در ریشه ی پروژه ی لاراول شما است. درون این فایل موارد دیتابیس را برای اتصال تنظیم کنید :
DB_CONNECTION=mysql DB_DATABASE=homestead DB_USERNAME=username DB_PASSWORD=password
دستور زیر برای اجرای مایگریشن ( ساختن جدول های مورد نیاز ) و همچنین seed کردن داده هاست :
$ php artisan migrate --seed
مدل ها در الگوی mvc نقش واسط بین اپلیکیشن و پایگاه داده را بازی میکنند یعنی هر اتفاقی که به پایگاه داده مربوط شود باید در سمت مدل ها نوشته شود.
مدل ها ( Model ) در لاراول به شما امکان کار با داده های درون جداول پایگاه داده را میدهد.
برای ساختن مدل جدید برای محصولات و سفارشات دستورات زیر را اجرا کنید :
php artisan make:model Product
و
php artisan make:model Order
مدل ها در مسیر app/Models ساخته میشوند. حالا فایل app/Models/User.php را باز کنید و با کد زیر جایگزین کنید :
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable, SoftDeletes; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; public function orders() { return $this->hasMany(Order::class); } }
در مدل های فریمورک لاراول SoftDelete قرار داده شده تا زمانی که یک عنصر را پاکسازی میکنیم فقط در ظاهر نمایش داده نشود و در واقع از دیتابیس پاکسازی نمیشود ، پس زمانی که یک بصورت اشتباهی یک رکورد را پاکسازی کردیم میتوانیم انرا بازیابی کنیم.
آرایه ای به اسم $fillable وجود دارد که باید شامل تمام فیلدهایی باشد که قصد داریم آنها را پر کنیم.
حالا فایل app/Models/Product.php را باز کنید و محتویاتش را به شکل زیر تغییر دهید :
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Product extends Model { use SoftDeletes; protected $fillable = [ 'name', 'price', 'quantity', 'description', 'image' ]; public function orders(){ return $this->hasMany(Order::class); } }
این مدل نیز مشابه مدل User هست با این تفاوت که یک رابطه ( relation ) با order ها دارد.
حالا فایل app/Models/Order.php را باز کنید و به شکل زیر تغییر دهید :
<?php
namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Order extends Model { use SoftDeletes; protected $fillable = [ 'product_id', 'user_id', 'quantity', 'address' ]; public function user() { return $this->belongsTo(User::class, 'user_id'); } public function product() { return $this->belongsTo(Product::class, 'product_id'); } }
این مدل نیز دقیقا مشابه مدل های دیگر است با این تفاوت که رابطه ی جدایی داخلش هست و رابطه نشان میدهد که سفارش متعلق به کدام یوزر هست .
مایگریشن ها مثل یک ورژن کنترلر برای دیتابیس شما هستند . آنها اجازه ی ساخت و مدیریت جدول و فیلدهای درون جدول را به برنامه نویس میدهند.
اگر بصورت تیمی کار کنید به راحتی میتوانید در قابل یک فایل تمامی کارهایی که برای ساخت و مدیریت خود جدول و سطر و ستون های آن انجام دادید را به اشتراک بگذارید.
برای ساختن یک مایگریشن جدید از دستور زیر استفاده کنید :
php artisan make:migration create_users_table
با اجرای کد بالا یک فایل php در مسیر database/migrations ساخته میشود که همنام با نامی است که موقع ساختن مایگریشن وارد کردیم. برای مثال بالا فایلی باید با نام create_users_table ساخته شود. باز کنید و محتویاتش را به شکل زیر تغییر دهید :
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->boolean('is_admin')->default(false); $table->string('password'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); } public function down() { Schema::dropIfExists('users'); } }
در اینجا ما ستون های یک جدول را با ویژگیهای آن ساختیم.
سپس مایگریشن create_products_table را باز کنید و کد زیر را درونش بنویسید :
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateProductsTable extends Migration { public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('description'); $table->unsignedInteger('quantity')->default(0); $table->double('price'); $table->string('image'); $table->timestamps(); $table->softDeletes(); }); } public function down() { Schema::dropIfExists('products'); } }
در نهایت مایگریشن جدیدی نیاز دارید که اگر وجود ندارد بسازید نام آن create_orders_table است و محتویاتش باید به شکل زیر باشد :
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateOrdersTable extends Migration { public function up() { Schema::create('orders', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('product_id'); $table->unsignedInteger('user_id'); $table->unsignedInteger('quantity')->default(1); $table->string('address')->nullable(); $table->boolean('is_delivered')->default(false); $table->timestamps(); $table->softDeletes(); }); } public function down() { Schema::dropIfExists('orders'); } }
لاراول از کلاس seed برای وارد کردن اطلاعات تستی در دیتابیس جهت پیش نمایش استفاده میکند . این کار ساختن یک فروشگاه با لاراول را ساده تر میکند چون اطلاعات تستی داریم.
در اینجا برای یوزر ها و محصولات بصورت تستی داده هایی میسازیم.
خب برای ساختن یک seeder جدید دستور زیر را استفاده کنید :
php artisan make:seed UsersTableSeeder
فایل جدیدی در مسیر database/seeds درست میشود که نامش UserTableSeeder.php هست آنرا باز کنید و محتویاتش را به شکل زیر تغییر دهید :
<?php use App\User; use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { public function run() { $user = new User; $user->name = "Admin" $user->email = "admin@bagisto.com" $user->password = bcrypt('bagisto'); $user->is_admin = true; $user->save(); } }
کلاس seeder بالا یک یوزر ادمین در دیتابیس میسازد.
با دستور زیر یک seeder جدید برای محصولات بسازید :
php artisan make:seed ProductsTableSeeder
حالا فایل جدیدی که در مسیر database/seeds/ProductTableSeeder.php ساخته شده را باز کنید و محتویاتش را با کدهای زیر عوض کنید :
<?php use Illuminate\Database\Seeder; class ProductsTableSeeder extends Seeder { public function run() { $products = [ [ 'name' => "Red & Navy Checked Slim Formal Shirt", 'description' => 'Red and navy checked formal shirt, has a button-down collar, a full button placket, long sleeves, a curved hemline.', 'quantity' => 21, 'price' => 200.10, 'image' => 'https://assets.myntassets.com/h_1440,q_100,w_1080/v1/assets/images/1038959/2015/1 /7/11449479796511-INVICTUS-Red--Navy-Checked-Slim-Formal-Shirt-4621449479796242 3.jpg', 'created_at' => new DateTime, 'updated_at' => null, ], [ 'name' => "Men Red Classic Slim Fit Solid Formal Shirt", 'description' => 'Red solid formal shirt, has a slim collar, button placket, 1 pocket, long sleeves, curved hem', 'quantity' => 400, 'price' => 1600.21, 'image' => 'https://assets.myntassets.com/h_1440,q_100,w_1080/v1/assets/images/3117516/2018/3 10/11520666535008-JAINISH-Men-Red-Classic-Slim-Fit-Solid-Formal-Shirt 2801520666534871-3.jpg', 'created_at' => new DateTime, 'updated_at' => null ], [ 'name' => "White & Red Checked Slim Formal Shirt", 'description' => 'White, red and blue checked formal shirt, has a contrast spread collar, a full button placket, long sleeves, a curved hemline', 'quantity' => 37, 'price' => 378.00, 'image' => 'https://assets.myntassets.com/h_1440,q_100,w_1080/v1/assets/images/1038966/2015/1 /8/11449575702385-INVICTUS-White--Red-Checked-Slim-Formal-Shirt-5221449575701961 1.jpg', 'created_at' => new DateTime, 'updated_at' => null, ], ]; DB::table('products')->insert($products); } }
بعد از اینکه seeder های خود را ساختید با استفاده از دستور زیر میتوانید آنها را وارد دیتابیس کنید و آماده ی استفاده باشند :
php artisan db:seed
برای قسمت اول همینقدر کافی است. باقی قسمت ها را در پارت دوم این مقاله ی آموزشی مینویسم.
اگر قصد دارید بصورت ویدیویی ساختن یک فروشگاه با لاراول را یاد بگیرید من از دوره ی آموزش پروژه محور ساخت فروشگاه مشابه دیجیکالا سایت آواسام استفاده کردم و به شما هم پیشنهاد میدم که از این دوره ی فوق العاده برای ساختن یک فروشگاه کامل به همراه سورس کد آماده و پشتیبانی و ... در این دوره شرکت کنید.
برای تهیه دوره ی بالا میتوانید به لینک زیر برید :
دوره ی آموزش ساخت فروشگاه اینترنتی مشابه دیجی کالا با لاراول به همراه سورس با اپ موبایل
به زودی پارت دوم این مقاله ی آموزشی را هم مینویسم تا یک فروشگاه ساده با لاراول را بسازید.