آموزش لاراول ؛ صفر تا صد – بخش دوم

ساختار پروژه آموزش لاراول
در بخش قبل از آموزش لاراول، ایجاد پروژه وبلاگ لارابوک با نحوه استفاده از ابزارهای مختلف بای ایجاد مدلها و نحوه ایجاد مدلها توضیح دادیم. در این بخش میخواهیم نحوه استفاده از مدلهای ایجاد شده در بخش قبل و نمایش اطلاعات را آموزش دهیم. با ما همراه باشید.
۱ بخش اول آموزش؛ ایجاد مدلهای پایگاه داده
کنترلر
ما تا اینجا ساختار پایگاه داده رو داریم. طبق مدل MVC باید اطلاعات سیستم از طریق کنترلهایی که توی سیستم تعریف میکنیم به سمت لایه نمایش هدایت بشن. کنترلر در واقع یه کلاسه که عموتا وظیفه هدایت جریان برنامه رو به عهده داره و گاهی وظیفه انجام برخی عملیات منطقی رو هم به عهده این کلاس میذاریم. برای ایجاد کنترلر هم یه دستور آرتیزان داریم:
دستور آرتیزان ایجاد کنترلر
1 |
php artisan make:controller BlogPostController |
این دستور یه فایل با اسم BlogPostController که یه کلاس باز با همین اسم داره و کلاس کنترلر لاراول رو توسعه میده میسازه. این فایل رو میتونید توی مسیر
1 |
app/http/controller |

ساختار پوشه بندی در لاراول – محل قرارگیری پوشه کنترلر
ببینید. وقتی فایل کنترلرتون ساخته شد اگه بازش کنید، میبینید که هیچ بدنه ای نداره.

اسکلت کنترلر پست بلاگ
افزودن فانکشنهای کنترلر
توی این کنترلر باید تمام فانکشنهای یا به زبان لاراول اکشنهایی که رفتارهای مختلف مربوط به پستهای وبلاگ رو توصیف میکنه ایجاد کنید. برای مثال اگه میخواید تمامی پستهای وبلاگ رو ببینید باید یه فانکشن که این کار رو انجام میده ایجاد کنید اسمش میتونه هر چیز مرتبطی باشه. برای مثال all، allPosts یا اسمهای مشابه. کنترلر بلاگ پست رو میتونید توی تصویر زیر ببینید:

افزودن اولین متد به کنترلر پست بلاگ
واکشی پستها
خوب الان ما یه کنترلر داریم که یه فانکشن داره برای واکشی کل پستهای موجود توی جدولی که برای پستها در نظر گرفتیم و احتمالا نمایش اونها تو قدم بعد. برای دسترسی به پستهایی که توی دیتابیس ذخیره شدن باید نمونه ای از مدل دیتابیس بسازیم و با استفاده از Query Builder پرس و جویی که میخوایم رو پیاده سازی کنیم. برای واکشی تمام پستهایی که توی جدول blog_post ذخیره شده به روش زیر عمل میکنیم:
1 |
$blogPosts = BlogPost::all(); |
کتابخانه ساخت پرس و جوی eloquent امکانات زیادی داره که امیدواریم بتونیم تو پستهای اختصاصی اونارو معرفی کنیم و توی پروژه ها ازشون استفاده کنیم. البته میتونید از مستندات فارسی لارابوک هم استفاده کنید.

استفاده از query builder برای واکشی تمام پستهای بلاگ
به همین راحتی حالا شما تمام پستهایی که توی جدول ذخیره کردید رو میتونید داشته باشید. قدم بعدی میتونه فرستادن این اطلاعات برای لایه نمایش باشه یا فرستادن اون به عنوان خروجی تابع برای استفاده توی API. این بستگی به نیاز پروژه داره. توی این پروژه ما اطلاعات واکشی شده رو فقط نمایش میدیم.
فرستادن اطلاعات برای نمایش
برای فرستادن اطلاعات سمت لایه نمایش در لاراول از تابع کمکی view استفاده میکنیم. این تابع اسم صفحه ای که باید نمایش داده بشه رو میگیره و صفحه رو برای نمایش آماده میکنه و سمت مرورگر کاربر میفرسته. بعلاوه اطلاعاتی که باید براش فرستاده بشه رو هم میتونید با تعریف نام متغیر به لایه نمایش بفرستیم. روش استفاده از این دستور رو در ادامه میبینید:

نحوه استفاده از تابع کمکی view برا نمایش اطلاعات بر روی صفحه
ایجاد view؛ ساختار blade
برای نمایش اطلاعات باید توی لایه نمایش ساختار نمایش اطلاعات رو ایجاد کنیم. برای این کار از ساختاری به نام blade استفاده میکنیم. Blade امکان ایجاد ساختارهای سلسله مراتبی صفحات، صفحات با قابلیت استفاده مجدد و همینطور ساختارهایی برای مدیریت اطلاعات روی صفحه برای ما فراهم میکنه. ساختار و اسکلت بندی صفحه با استفاده از HTML پیاده سازی میشه. و به خوبی با جاوااسکریپت و css و تمام فریمورکهای مرتبط با این زبانها سازگاری داره.
حالا بریم سراغ ساختن این صفحات، یکی از جاهایی که هنوز آرتیزان دستوری براش نداره اینجاس. فایلهای لایه نمایش توی آدرس
1 |
[project-root]/resources/views/ |
ساخته میشن.

محل قرارگیری viewها در ساختار پوشه بندی
به طور پیش فرض وقتی سراغ این مسیر میرید یه فایل با اسم welcome.blade.php میبینید. پسوند این فایل رو دقت کنید blade.php هست. این پسوند برای اینکه موتور پردازشی blade محتویات داخل این فایل رو بشناسه لازمه.
پیشنهاد: بهتره صفحات نمایش مربوط به هر موجودیت رو تو یه فولدر قرار بدید. ما برای فعالیتهای مختلف مثل نمایش لیست پستهای وبلاگ، ایجاد یک پست جدید، نمایش پست وبلاگ توی حالت ویرایش به صفحات متفاوت نیاز داریم. بنابراین راه حل اینه که یه فولدر با اسم blogpost ایجاد کنیم و هر صفحه ای مربوط به این موضوع رو اونجا بسازیم.
ساختار پوشه های پروژه به شکل زیر میشه.

ساختار پوشه بندی در view
حالا باید یه فایل با اسم all.blade.php توی این پوشه بسازید. این فایل ساختار HTML خواهد داشت اما برای خوندن اطلاعات از متغیرهای فرستاده شده و همینطور امکان استفاده از ساختارهای تصمیم گیری و حلقه دستوراتی رو هم به ما ارائه میده. اطلاعات بیشتر در مورد blade و ساخت صفحهات رو میتونید از منابع خودش دنبال کنید. ما اینجا ساختار صفحه رو از پیش برای شما آماده کردیم که میتونید دانلود کنید در صورت نیاز تغییر بدید و استفاده کنید.
خوب به نظر میاد به نقطه خوبی رسیده باشیم. الان میتونیم اطلاعات رو از پایگاه داده بخونیم و برای یه صفحه بفرستیم تا نمایش بده. اما هنوز یه نکته مونده.
مسیریابی با استفاده از routes.php
لاراول برای هدایت درخواست های HTTP که به نرم افزار وب میرسه از ساختاری به نام Route یا مسیریاب استفاده میکنه. Route از یه فایل استفاده میکنه که شما مشخص میکنید هر کدوم از درخواستها توسط کدوم یک از فانکشنهای controller باید انجام بشه. فایل routes.php رو میتونید از مسیر زیر پیدا کنید:
1 |
[project-root]/app/http/routes.php |

محل قرارگیری فایل routes.php در ساختار پوشه بندی لاراول
برای اطلاعات بیشتر در مورد ساختار مسیریابی و فایل routes.php میتونید از مستندات فارسی اون توی لارابوک استفاده کنید. میتونید ساختار مورد نیاز برای هدایت درخواست به فانکشنی که توی کنترلر تعریف شده رو در ادامه ببینید
تغییر: پروژه روی گیت هاب هم قرار داده شده، و همزمان با این آموزش تکمیل میشه. میتونید clone کنید و آخرین تغییرات رو به روز داشته باشید.
لطفا اگه این آموزش رو دنبال میکنید، پرسشهاتون رو بنویسید تا بتونیم کمک کنیم مشکلات احتمالی حل شن
سلام! خیلی ممنون از آموزشهاتون.. لطفا ادامه بدید و نذارید مثل سایر سایتها مطالب آموزشی نصفه بمونه
ممنون از نظرتون، امیدواریم بتونیم آموزشهای مفیدی ارائه بدیم
سلام ممنون از زحماتی که می کشید و سایت خوبی که دارید
مراحل اتمام پروژه چطوره؟ یعنی زمانی که کد نویسی تموم شد و خواستیم از پروژه خروجی نهایی بگیریم و روی هاست آپلود کنیم، باید چه کار کنیم؟
آخه کل فریمورک لاراول حجمش زیاده بیش از ۲۰ مگه!
آیا کد خاصی برای آرتیسان داره یا باید برخی از فایل ها رو حذف کرد؟
لطفا کامل پاسخ بدید
ممنونم و موفق باشید
ممنون از کامنت. حتما در مورد هاست کردن پروژه ها توضیح خواهیم داد. البته به زودی
عجیبه. بخش اول رو با زبان نوشتاری گذاشتید، بخش دوم رو با زبان محاوره!
به نکته خوبی اشاره کردید. ممنون از توجهتون. ما هم تازه کار و صرفا برنامه نویس هستیم. یکم زمان میبره یه چیزایی رو یاد بگیریم. ولی امیدواریم با نظرای شما بهتر شیم
سلام
بسیار ارزشمند هست کارتون
سپاس
سلام
ممنون از آموزش هاتون.. عالین..
من تازه دارم با لاراول کار میکنم و این پروژه ای که دارین پیش میبرین رو دارم با آموزشتون پیش میرم
الان ب مشکل برخوردم..
همه قسمت ها رو انجام دادم، مدل و کنترلر و view رو ساختم ولی روی browser که اجرا میکنم نتیجه رو ببینم ارور دیتابیس بهم میده..
نمیدونم کجارو اشتباه کردم.. چون جداول رو همونطور که تو آموزشتون گفته بودید به دیتابیسم اضافه کردم و هیچ مشکلی هم نداشت..الان نمیدونم مشکل از کجاست..ممنون میشم راهنماییم کنید..
SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.blog_posts’ doesn’t exist (SQL: select * from
blog_posts
)امیدوارم مشکلتون حل شده باشه. چک کنید ببینید جدولهاتون رو توی دیتابیس ساختید
سلام
ممنون از زحماتتون اما واقعاً مبحث سنگینیه ( البه شاید برای من )، روش خوندن من به این صورته که تک تک متدهارو می خام دقیق بفهمم ، شما به عنوان کسی که به این فریم ورک مسلط همچین کاریو صحیح می دونین و شیوه خاصی برای درک مطالب دارین؟ به عنوان مثال اصلاً متوجه نمیشم که تو نمایش اطلاعات چه جوری از with() استفاده کردین
با تشکر
بیشتر به کاربرد توجه کنید تا مسلط شید و بتونید پروژه هاتون رو بنویسید. بعد از مدت زمانی خودکار جزییات رو هم متوجه میشید
سلام من لاراول ۵٫۳ رو دانلود کردم محتویاتش، یعنی پوشه هایی که داره با این پوشه های برنامه تون فرق می کنه مثلاً یه پوشه routes داره در همون روتش و چند تا فایل داخلش که یکی از فایلاش به نام همین routes.php ولی در پروژه شما همچین پوشه ای نیست و گفتین که فایل routes.php رو تو app/http بسازین و البته برنامه که تو گیتاب گذاشتین کار می کنه ولی خب من دقیقا همون فایل های اصلی پروژه رو که ایجاد کردین و آموزش دادین تو همون مسیر ها گذاشتم(تو لاراول ۵٫۳) ولی موقع اجرا ارور از روت کردن می ده. حالا منظورم در کل اینه آیا بین ساختار برنامه ای که شما با لاراول نوشتین (ورژنشو نمی دونم) و در گیتاب بارگزاری کردین با این لاراوال ۵٫۳ فرق می کنه که اونجا به خوبی اجرا میشه ولی با لاراول ۵٫۳ ارور میده
بله نسخه ۵٫۳ از نظر ساختاری تفاوتهایی با نسخه ۵٫۲ داره. آموزشهایی که ما ارائه دادیم برپایه نسخه ۵٫۲ هستن
سپاس فراوان برای اشتراک مطالب مفیدتان.
سلام
یه سوال دارم، چرا فایل های من یه مقدار با چیزایی که تو منابع مختلف هست متفاوته؟
مثلا همه جا گفته میشه که باید داخل فایل routes.php
route هامون رو تعریف کنیم ولی من همچین فایل رو ندارم ، در نهایت یه این فایل رو ایجاد کردم و روت ها رو داخلش نوشتم ولی اصلا کار نکرد، بعد از یک روز سر و کله زدن دیدم روت های من داخل فایل Web.php در پوشه route قرار داره و در پوشه app/http هیچ روتی نیست؟!!؟!
امیدوارم مشکلتون حل شده باشه. نسخه لاراولی که استفاده میکنید چیه؟ اگه برای ساخت پروژه از کامپوزر استفاده کردید تقریبا بعیده همچین چیزی نباشه
سلام. متشکر از آموزشهاتون
فایل blogpost.php کی درست شد؟
این لاراول واقعا پیچیدست یا شما پیچیده توضیح دادید یا من پیچیده می بینم؟
پیچیدگی داره. ما هم سعی کردیم ساده توضیح بدیم. ولی امیدواریم با نظرات شما آموزشها قابل فهم تر و کاربردی تر بشن. اگه بدونم کدوم بخش نامفهوم بوده براتون میتونم بهتر کمک کنم
سلام خسته نباشد
آموزشهای خوبی دارین ممنونم
یه سوال داشتم محیطی (IDE) که توش دارین کد میزنین و لاراول آموزش میدین چیه؟
ما از PHPStorm استفاده میکنیم
با سلام بنده میخوام که یک پروژه که آماده هست در واقع سورس کدهاشو دانلود کردم(پروژه شبکه اجتماعی با لاراول) رو در phpstorm اجرا کنم لطفا راهنمایی بفرمائید
#نحوه اجرای سورس کد پروژه آماده با لاراول در phpstorm