پروژه MVC لاراول؛ صفر تا صد – بخش اول

ساختار پروژه لاراول
امروز اولین پست از مجموعه پستهای تولید یک پروژه با لااول را ارائه میدهیم.
در این مجموعه پستها بخشهای مختلف یک پروژه لاراول را توضیح میدهیم. پروژه ای که در نظر گرفته ایم یک وبلاگ ساده است که در آن افراد میتوانند عضو وبلاگ شده، پست ایجاد کنند، بر روی پستها به عنوان میهمان یا عضو کامنت بگذارند، به پستها رای بدهند، آنها را در شبکه های اجتماعی به اشتراک بگذارند. همچنین مدیر وبلاگ هم میتواند پستها را مرور کرده و در حالتهای مختلفی، مانند در حال انتظار بررسی، منتشر شده، غیرقابل انتشار قرار دهد. مدیر بلاگ همچنین میتواند کاربران را فعال یا غیرفعال نماید.
ایجاد پروژه لاراول
در قدم اول از ساخت پروژه شروع میکنیم. برای ساخت یک پروژه لاراول بهترین روش استفاده از ابزار کاربردی Composer است. در صورتی که هنوز composer را نصب نکرده اید میتوانید از سایت آن دانلود کنید و مراحل نصب را متناسب با سیستم مورد استفاده دنبال کنید. پس از نصب میتوانید با دستور زیر یک پروژه لاراول را ایجاد نمایید. (برای انجام تنظیمات میتوانید فیلم آموزشی حامد پاکدامن برای نصب لاراول را ببینید.)
1 |
composer create-project laravel/laravel {directory} “~۵٫۲٫۰” --prefer-dist |
برای آشنایی با جزییات مربوط به نصب لاراول میتوانید به مستندات فارسی در لارابوک هم مراجعه کنید.
با ساختن پروژه لاراول شما امکاناتی را در اختیار دارید. مانند احراز هویت کاربران و کافی است از آن استفاده کنید.
ایجاد جدولهای پایگاه داده
برای شروع از پایگاه داده و جدولها شروع میکنیم. نحوه انجام تنظیمات پایگاه داده پروژه، ساخت جدولها با استفاده از مایگریشنها، و ایجاد مدلها در لاراول با استفاده از آرتیزان را بررسی میکنیم.
استفاده از مایگریشنها
مایگریشنها ابزار بسیار مفیدی برای امکان ایجاد نسخه بر روی پایگاه داده هستند. در محیطهای تیمی و همچنین محیطهایی که تغییرات پایگاه داده زیاد است میتواند کاربرد زیادی داشته باشد.
طراحی پایگاه داده
پیش از استفاده از ابزار باید ساختار پایگاه داده را طراحی کنیم. برای وبلاگ ساختار زیر را در نظر گرفته ایم.

نمودار رابطه موجودیت پروژه وبلاگ لاراول
حال که ساختار پایگاه داده را میشناسیم میتوانیم با استفاده از مایگریشنها در لاراول آن را پیاده سازی کنیم.
برای ایجاد مایگریشن از دستور زیر استفاده میکنیم.
1 |
php artisan make:migration create_blog_post_table --create=blog_post |
اجرای این دستور فایلی در دایرکتوری database/migrations با نام مشخص شده ایجاد میکند. تصویر این فایل و محتوای آن را در ادامه میبینید. برای مطالعه بیشتر مایگریشن ها میتوانید از مستندات فارسی لاراول در لارابوک استفاده کنید.

ساختار مایگریشن
برای تعریف ساختار پایگاه داده در مایگریشنها از Schema Builder استفاده میکنیم. به عنوان مثال برای ساختن ساختار جدول blog_post از ساختار دستور زیر استفاده میکنیم.

استفاده از Schema Builder برای ایجاد ساختار جدولها در مایگریشن
حال با استفاده از دستور زیر میتوانید مایگریشن ایجاد شده را اجرا کنید.
1 |
php artisan migrate |
نکته: پیش از اجرای دستور نیاز به انجام تنظیمات ارتباط با پایگاه داده دارید.
پس از اجرای مایگریشنها ساختار تعریف شده در پایگاه داده ایجاد می شود.
ایجاد مدل
از آنجا که در لاراول پروژه ها بر پایه MVC پیاده سازی میشوند برای استفاده از جدولهای پایگاه داده باید از نگاشت آنها در برنامه استفاده کرد. به این منظور در پروژه لاراول باید مدلهای متناظر با جدولهای پایگاه داده را ایجاد نمود. برای ایجاد مدلهای پایگاه داده میتوانید از فرمان آرتیزان زیر استفاده کنید.
1 |
php artisan make:model BlogPost |
این فرمان یک کلاس مدل با نام BlogPost در دایرکتوری app ایجاد میکند.
پیشنهاد: اگر میخواهید با افزوده شدن تعداد مدلهای پروژه پوشه app شلوغ نشود یک دایرکتوری Models یا Entities یا با هر نام دیگری بسازید و مدلهای نرم افزار را درآن قرار دهید. حال دستور را با قالب زیر اجرا کنید.
1 |
php artisan make:model Entities/BlogPost |
با این روش مدل BlogPost در دایرکتوری Entities ایجاد میشود.
ارتباط بین مدلها
از آنجاکه در پایگاه داده ارتباطهایی بین جدولها وجود دارد، باید امکان ایجاد این ارتباط در مدلها هم وجود داشته باشد. برای مثال بین جدول کاربران و جدول پستهای وبلاگ یک ارتباط یک به چند وجود دارد. بدین معنی که هر کاربر میتواند چندین پست ایجاد نماید.
پستهای یک کاربر
برای پیاده سازی آن در مدلهای لاراول کلاس مدل User فانکشن زیر را می افزاییم.

ارتباط بین کاربر و تعداد پستهای وبلاگ
نکته: لاراول به صورت پیش فرض مایگریشن و مدل User را ایجاد میکند.
کاربر ایجاد کننده پست
اما این ارتباط یک ارتباط دوسویه است. به این معنی که گاهی نیاز است بدانیم هر پست وبلاگ متعلق به کدام کاربر است – به عبارت دیگر کاربر ایجاد کننده پست وبلاگ را واکشی کنیم. بنابراین باید رابطه را از سمت پست وبلاگ هم ایجاد کنیم. برای این کار، همانطور که احتمالا حدس زده اید، باید در کلاس مدل BlogPost فانکشن زیر را تعریف کنیم:

ارتباط بین مدل پست وبلاگ و کاربر ایجاد کننده پست
رابطه های ایجاد شده در نوشتن پرس و جوها، هنگام استفاده از Query Builder کمک زیادی به ساده سازی پرس و جوها میکنند.
تا اینجا نحوه انجام تنظیمات پایگاه داده، ایجاد مایگریشنها، ایجاد مدلها را آموختیم. مسلما در این پست به تمامی جنبه ها و جزییات مربوط به آماده سازی زیرساخت داده ای در لاراول نپرداخته ایم، اما چهارچوب و روال این کار بررسی شده است. در پست بعدی نحوه ایجاد کنترلرها و نحوه استفاده از مدلها و Query Builder برای ایجاد پرس و جوها را توضیح خواهیم داد. میتوانید به عنوان تمرین مایگریشن و مدل مربوط به موجودیت comment را ایجاد نمایید.
امیدواریم با مساله های زیادی در مسیر ایجاد مایگریشن و مدل comment روبرو شوید و آنها را در کامنتها با ما و بقیه دوستانی که در این پستها ما را همراهی میکنند در میان بگذارید. سعی میکنیم در سریعترین زمان ممکن با هم مسائل را بررسی کنیم.
سلام
من تازه شروع به یادگیری لاراول کردم این روندی که شروع کردین واسه آموزش قطعا خیلی موثره ممنون میشم سریع تر آموزشها رو جلو ببرین 🙂
خوشحالیم که براتون مفید بوده. امیدوارم تجربه و مسائلی که تو مسیر یادگیری دارید رو با ما هم به اشتراک بذارید تا بتونیم مطلبمون رو توسعه بدیم و بهترش کنیم
با سلام . میتونید عضو کانالمون بشید تا مطالب رو بصورت هفتگی دنبال کنید . لینک کانال تلگرام
سلام ممنون از اموزش های خوبتون
ولی من نتونستم با فیلم آموزشی لاراول رو نصب کنم و خطا میده حتی با لاراگون هم سعی کردم ولی نشد.آیا موردی هست که ممکنه نگفته باشید ولی من باید رعایت می کردم؟
خطایی که میگیرید رو اینجا بذارید تا بتونیم راهنمایی دقیقتری ارائه بدیم
Whoops, looks like something went wrong.
راستش فولدر public من فقط شامل .htaccessوfavicon وindex.php وrobots وweb
تو لاراول با فولدر public زیاد کاری نداریم. انتظار نداشته باشید چیز زیادی اونجا ببینید
ببخشید این error:
RuntimeException in compiled.php line 7724: No supported encrypter found. The cipher and / or key length are invalid.
آیا این دستور رو رو پروژتون قبلا اجرا کرده اید ؟
php artisan key:generate
شما برای هر پروژه لاراول یک رشته ۳۲ کاراکتری احتیاج دارید که با اجرای این دستور از خط فرمان (CMD) از مسیر پروژه میتونید ایجادش کنید:
php artisan key:generate
این رشته به عنوان کلید برنامه استفاده میشه و برای کدگذاری اطلاعات استفاده میشه
من این کار رو انجام دادم ولی خطای زیر رو بهم داد :
[ErrorException]
file_get_contents(C:\xampp\htdocs\laradev/.env): failed to open stream: No
such file or directory
میشه لطفا یادم بدید چطور فایل .env ایجاد کنم؟
توی مسیری که مشخص شده فایلی با اسم .env.example هست که میتونید از اون کپی بگیرید و با یه ویرایشگر مثل notepad بازش کنید و با اسم .env ذخیره کنید. مقادیری که پیش فرض برای نام پایگاه داده و نام کاربر پایگاه داده و پسوورد هست و کلید برنامه APP_KEY رو میتونید توی این فایل ببینید.
ممنون
سلام
میشه در مورد پیکر بندی دیتا بیس بیشتر توضیح بدید
من داکیومنت های لاراول را هم خواندم ولی چیزی دستگیرم نشد
منظورتون از پیکربندی نحوه ساختن دیتابیس هست؟
عالیه خدا خیرتون بده
در مورد seo friendly هم بگید مثل این -> پروژه-mvc-در-لاراول-صفر-تا-صد/
ممنون از توجهتون به سایت. امیدواریم مطالب برای شما مفید بوده باشه و با نظراتتون به بهتر شدن محتوا کمک کنید.
در مورد درخواستتون باید بگم میتونیم بهش بپردازیم اما با توجه به اولویتهای ما توی لارابوک نمیتونم قول بدم زمان این کار نزدیک باشه
سلام من تازه به شروع یادگیری لارول کرده ام واستادم یه موضوعی داده که من ازش سر درنمیارم باتوجه به پست هاتون تونستم نصبش کنم ولی سوالی که کرده رو منظورشو نمیفهمم اگه میشه کمکم کنید،سوالش اینه!!!
در لاراول mvc یک درخواست ساده را با ajax به سرور بده و جواب بگیر
با سلام . این مطلب رو بخونید کاملا ajax توی لاراول رو توضیح داده : Post data using ajax in laravel 5
سلام.
من دوتا تیبل دارم. ۱- users و ۲-posts
حالا میخوام یک رابطه یک به چند میان این دوتا برقرار کنم. داخل فایل model تیبل users کد زیر نوشتم :
public function post()
{
return $this->hasMany(‘\App\post’,’user_id’);
}
و در فایل model تیبل posts هم کد زیر :
public function user()
{
return $this->belongsTo(‘\App\User’,’user_id’);
}
تا اینجا کد ها درسته دیگه ؟
خب حالا در حالت عادی اگر من رکوردی وارد کنم داخل جدول posts و اگر user_id ما چیزی باشه که داخل جدول users نباشه باید به من ارور بده. ( داخل sql که این جوری بود )
من از طریق tinker رکورد هایی به جدول posts اضافه میکنم با user_id هایی که اصلا وجود نداره و رکوردها در جدول ذخیره میشن.
مشکل کار من چیه ؟ چرا رکورد ها با user_id هایی که اصلا وجود ندارن ذخیره میشن ؟
این کنترل رو mysql انجام میده. ارتباط اونجا برقرار هست؟ یعنی توی MySql کلید خارجی ایجاد کردید؟
درود.
مرجع مفید و کاربردی دارید برای لاراول.
یک سئوال داشتم در مورد لاراول :
زمانی که پروژه را در لوکال آماده می کنیم و روی هاست نصب می کنیم من محتویات فایل public رو به root directory بردم و فایل public دیگه استفاده ای ندارم.
موضوعی که هست زمانی که در داخل هاست فایل ها رو منتقل کردم همه چی صحیح هست اما فایل .env که برخی تنظیمات داخل اون قرار داره مانند کلید ها و…
از طریق آدرس مرور گر mysite.com/.env قابل مشاهده و دسترس هست چطور می تونم این فایل رو مخفی کنم(من از طریف htaccess دسترسی به این فایل رو بستم
اما سئوالی که دارم این کار منطقی هست ؟ روش بهتر و منطقی تری برای این موضوع وجود داره ؟ و سئوال آخر اینکه آیا انتقال به این صورت به هاست (همراه فایل های composer و… )به هاست صحیح هست و از نظر امنیتی مشکلی ندارد ؟
با تشکر
سلام . بله روشی که کار کردید از نظر امنیتی مشکل داره. ببینید شما باید محتوایات فولدر public رو درون فولدر public_html هاستتون قرار بدید و بقیه فایلها باید در دایرکتوری خارج از public_html قرار بگیرن. اینجوری دیگه فایلها از طریق مرورگر قابل دسترس نیستند. یه ویدیو آموزشی هم هست که نحوه نصب لاراول به این روش رو توضیح دادیم . تو سایت بگردید پیداش خواهید کرد. موفق باشید
سلام من یک مشکل در لاراول دارم یک فرم ساختم برای محاسبه قیمت به اینصورت که قیمت را از داخل پایگاه داده استخراج میکنم ضربدر تعداد میکنم که کاربر از طریق فرم وارد میکند و خطا به من میده که استرینگ را تبدیل به اینتیجر کنید حالا من چطوری میتونم این کار رو انجام بدم هم فرم رو گذاشتم هم خطا رو برام فرم رو اصلاح کنید ممنون میشم کمکم کنید.
قیمت هر عدد تومان
حداقل خرید عدد
حداکثر خرید عدد
{!! Form::open([‘method’=>’POST’, ‘url’=>[‘add’]]) !!}
‘mobile’, ‘placeholder’=>’تعداد’));
$total = $pri * $price;
echo “پرداخت : $total”;
echo Form::Hidden(‘buyName’, ‘بازدید ویدئو’);
echo Form::text(‘videolink’, ‘لینک ویدئو’);
echo Form::text(‘fname’, ‘نام شما’);
echo Form::text(’email’, ‘ایمیل شما’);
echo Form::number(‘tell’, ‘موبایل’,array(‘class’=>’mobile’, ‘placeholder’=>’موبایل’));
echo Form::submit(‘ثبت’, [‘class’=>’btn’]);
?>
{!! Form::close() !!}
چند روش امتحان کردم نشد خطای زیر را به من میدهد.
Object of class Illuminate\Support\HtmlString could not be converted to int (View: C:\wamp\www\login\resources\views\site\index.blade.php)
سلام علیکم و واقعا خسته نباشید
ببخشید یک سوال داشتم
من دارم ی سیستم طراحی میکنم و تا قبل این با لاراول کار نکردم و تازه میخام شروع.
دیتابیس سیستممو قبل از اینکه تصمیم بگیرم با لاراول کار کنم ایجاد کردم.
حالا میخام با لاراول به خاطر مزیتایی که تو همین سایت ازش خوندم سیستمم رو ایجاد کنم.
دیتابیسش اگه با کدایی که مثل اموزش الان اموزش دادین اگه نزنم مشکلی پیش میاد؟
یا اگر بخام در اینده بزنم و الان از دیتابیسی که ایجاد کردم استفاده کنم؟
ممنون میشم پاسخ بدین
خیلی حیاتیه برام
با سلام . خیر هیچ اشکالی نداره . میتونید در آینده هم در صورت لزوم میگریشن های پروژتون رو بنویسید . ولی پیشنهاد بنده اینه که سعی کنید با میشگرشن جداول رو ایجاد کنید و اینکه برای کار تیمی خیلی خوب جواب میده .
سلام دوست عزیز خسته نباشید ممنون به خاطر مطالب خوبتون.
من یه ۲ سالی هست که php کار میکنم ولی oop و mvc بلد نیستم . برای اینکه بتونم لاراول رو به خوبی یاد بگیرم چیکار باید بکنم از کجا شروع کنم چه پیش نیاز هایی برا لاراول هست
سلام. مستندات لاراول رو بخونید کافیه. البته سایت های زیادی هستن که میتونه به یادگیری این موارد کمک کنه. مثلا w3school
در مورد mvc میتونید این مطلب رو از سایت خودمون هم بخونید http://larabook.ir/%D8%A7%D9%84%DA%AF%D9%88%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%A7%D9%85-%D9%88%DB%8C-%D8%B3%DB%8C-mvc/
salam porje hayi ro ke az github migirim cheotri ejra konim
با سلام و عرض خسته نباشید
واقعا عالیه
سرعت یادگیری رو واقعا افزایش دادین
با مستندات انگلیسی زمان بیشتری میبرد ، خیلی ممنونم
خواهش میکنم. خوشحالم مفید بوده.
سلام ممنون بابت آموزش خوبتون
تنظیمات فایل دیتابیس و .env را انجام میدهم ولی زمان ساخت مایگریشن، پیغام خطا database[] not configurd
لطفا کمک کنید
ممنون
امیدوارم مشکل حل شده باشه. ولی اگه حل نشده همه خطارو اینجا بذارید. اینجوری راحت تر میتونم کمک کنم. حتی محتویات فایل تنظیمات دیتابیستون رو هم میتونید بذارید.
سلام
من یه هفته میشه که لاراول شروع کردم اولین بار تونستم یه پروژه ایجاد کنم و از همون یه بکاپ گرفتم
اما الان چند وقت که نمیتونم با کامپوزر کار کنم و پروژه جدید ایجاد کنم
اگه کسی میدونه مشکل چیه به منم بگه
با تشکر
ارور:
[Composer\Downloader\TransportException]
The “http://packagist.org/p/provider-2013%2434454482d40d3600561d085ef5ad0c231
c337d43af4588b9790bb296275a5434.json” file could not be downloaded: failed to
open stream: HTTP request failed!
ببخشید بابت تاخیر توی جواب دادن. احتمالا دسترسی به ریپازیتوریها محدود شده. با فیلترشکن تست کنید امیدوارم مشکل رفع بشه.
سایت w3school درمورد لاراول چی نوشته مگه؟
در مورد شی گرایی و mvc مطالب آموزشی دارن. البته امیدواریم ما هم بتونیم مطالب اینجوری ارائه بدیم.
آموزش عالی است و دستتون درد نکنه من فقط به مشکلی خوردم
[Illuminate\Database\QueryException]
SQLSTATE[HY000] [1045] Access denied for user ‘homestead’@’localhost’ (using password: YES) (SQL: select * from information_schema.tables where table_schema = home
stead and table_name = migrations)
اگه به دقت متن پیغام خطارو بخونید میبینید که امکان دسترسی برای کاربر homestead از localhost وجود نداره. احتمالا اطلاعات کاربری پایگاه داده رو اشتباه وارد کردید.
سلام تو این قسمت”پستهای یک کاربر” ما این کد رو باید کجا اضافه کنیم ؟
باید یه فایل به اسم User داشته باشید. این فایل رو باز کنید و اونجا ساختار یه کلاس میبینید با اسم User. این کد رو اونجا بگذارید. عذرخواهی میکنم بابت تاخیر توی پاسخگویی
سلام؛ خسته نباشین بابت آموزش های خوبتون
من میخوام به sql server متصل بشم ولی این کار انجام نمیشه
ویندوز ۱۰ ۶۴bit
xampp نسخه php 5.6
sqlsrveهاشم دانلود و توی پوشه exc کپی کردم و تو تنظیمات php.ini هم وارد کردم
توی کانکشن هم مثل زیر عمل کردم
‘sqlsrv’ => [
‘driver’ => ‘sqlsrv’,
‘host’ => env(‘DB_HOST’, ‘localhost’),
‘database’ => env(‘test’, ‘forge’),
‘username’ => env(‘visitor’, ‘forge’),
‘password’ => env(‘visitor’, ”),
‘charset’ => ‘utf8’,
‘prefix’ => ”,
],
شایدم نصب میشه ولی بلد نیستم تست کنم ببینم کانکشن متصل شده یا نه
امیدوارم مشکلتون حل شده باشه. ولی اگه میبینید میتونید به پایگاه داده وصل شید یا برای مثال مایگریشن اجرا کنید که باید همه چی درست باشه
حتما باید از Composer استفاده کنیم؟
تو دریم ویور نمیشه؟