آموزش لاراول؛ قدم به قدم – بخش سوم

ساختار پروژه آموزش لاراول
در بخش پیشین آموزش لاراول نحوه ایجاد کنترلر و استفاده از مسیریابی یا route برای هدایت درخواستها به متد یا اکشن مناسب از کنترلر را دیدیم. همچنین نحوه واکشی اطلاعات و فرستادن نتیجه به view یا صفحه ای که اطلاعات را نمایش میدهد و نحوه نمایش آن بر روی یک صفحه (view) که در قالب استانداردهای blade ایجاد شده بود را بررسی کردیم.
- آموزش لاراول؛ بخش اول – ایجاد پروژه و پایگاه داده، ساختار مدل و ارتباطها
- آموزش لاراول؛ بخش دوم – ایجاد صفحه نمایش تمام اطلاعات
دراین بخش نحوه ایجاد صفحه ای برای ثبت پست جدید را خواهیم دید.
روال کار به شکل زیر خواهد بود:
- ایجاد صفحه ای برای ثبت اطلاعات
- ایجاد متد/اکشنی که با درخواست کاربر برای ثبت اطلاعات صفحه ثبت را نمایش میدهد
- ایجاد متد/اکشنی که با درخواست ثبت کاربر این درخواست را برای ثبت در پایگاه داده به سمت سرور میفرستد.
- ایجاد routeهایی که هر یک از درخواستهای بالا را به متد/اکشن متناسب با آن هدایت میکند.
بنابراین با ایجاد صفحه ورود اطلاعات آغاز میکنیم.
ایجاد صفحه ورود اطلاعات
در دنیای وب برای ایجاد درخواستی که از طریق آن بتوان اطلاعات را ثبت کرد از فرمها استفاده میکنیم. فرم HTML یک درخواست از نوع HTTP/POST ایجاد میکنند. بنابراین باید صفحه ای ایجاد کنیم که یک فرم در آن قرار داشته باشد. در نسخه ۵ لاراول موتور پردازشی blade امکان استفاده از تگ فرم HTML را فراهم میکند. بنابراین به روش زیر یک فرم با امکان ثبت یک پست وبلاگ ایجاد میکنیم.

ساخت فرم در لاراول
از آنجا که هدف این آموزش ایجاد صفحاتی با ظاهر مورد پسند کاربر نهایی و همچنین محیط تجاری نیست بنابراین از استایل ساده بوت استرپ استفاده میکنیم.
اگه به فرم ایجاد شده دقت کنید میبینید که یک فرم ساده HTML ایجاد کرده ایم. و تنها تکه کدی که مربوط به لاراول و blade میشود در قسمتهای action و csrf_field هستند.
کد استفاده شده در قسمت action مربوط به تابع کمکی است که آدرس route مربوط به ذخیره اطلاعات را ایجاد میکند.
1 |
{{ URL::to(‘post/create’) }} |
تایع کمکی csrf_field یک textbox پنهان شده HTML ایجاد میکند که یک کد مربوط به session کاربر در آن قرار دارد. این کد در طول زمانی که کاربر با سایت کار میکند و نشست یا session او معتبر است به ازاء تمام درخواستهای او بررسی میشود و در صورت همسان نبودن این کد با کد سمت سرور، لاراول اجازه ثبت اطلاعات را از کاربر میگیرد.
ایجاد متد/اکشن نمایش صفحه ثبت پست بلاگ
فایل کنترلر BlogPostController را باز کنید و در بدنه کلاس یک متد/اکشن جدید بسازید. برای هدایت درخواست به صفحه مورد نظر همانطور که پیش از این هم دیده اید از تابع کمکی view استفاده میکنیم. نحوه انجام این کار را در ادامه میبینید.

اکشن هدایت به صفحه جدید
گاهی نیاز خواهد بود اطلاعاتی را به صفحه view مورد نظر بفرستید. میتوانید پیش از فراخوانی view اطلاعات مورد نیز را آماده کنید و با استفاده از تابع کمکی with به صفحه نمایش یا view مورد نظر بفرستید.
در این مرحله میتوانید با ایجاد routeهایی که در خواستها را به این متد هدایت میکنند صفحه و متدی که ساخته اید را آزمایش کنید. برای این کار خط زیر را به فایل app\HTTP\routes.php اضاف کنید.
1 |
Route::get('/post/create', ['as' => 'blogpost.create', 'uses' => 'BlogPostController@create']); |
این route یک درخواست HTTP/GET را به متد create از کنترلر BlogPostController هدایت میکند.
در قسمت “as” میتوانید یک نام مستعار برای route تعریف کنید. این نام را میتوانید در مکانهای مخنلف که نیاز به هدایت به این صفحه وجود دارد استفاده کنید.
حال در صورتی که آدرس “/post/create” را در نوار آدرس مرورگر وارد کنید باید صفحه زیر نمایش داده شود.

صفحه ایجاد پست جدید
در صورت وجود مشکلی تا این مرحله از آموزش میتوانید با جزییات آن را در بخش کامنتها بنویسید تا به شما کمک کنیم راه حل را سریعتر پیدا کنید.
ثبت اطلاعات
قدم بعد ساختن متدیست که اطلاعات پست را ثبت میکند. و همینطور routeی که اطلاعات ورودی کاربر را به این متد هدایت میکند.
برای این کار متد دیگری در کنترلر BlogPostController با عنوان store ایجاد میکنیم که ثبت اطلاعات کاربر را انجام میدهد. در این متد از قابلیتهای Eloquent برای ذخیره اطلاعات استفاده میکنیم. پس از ذخیره اطلاعات کاربر را به صفحه (view) نمایش تمام پستهای بلاگ هدایت میکنیم تا بتواند آخرین پستی که ثبت کرده را ببیند. روال انجام این کار را میتوانید در تصویر زیر ببینید.

متد/اکشن ذخیره اطلاعات
متد BlogPost::all() تمام پستهای بلاگ موجود را واکشی میکند و برای صفحه نمایش (view) میفرستد. در استفاده از نام انتصاب داده شده به متغیر دقت کنید. اگر به یاد داشته باشید در مراحل قبل متغیری برای نمایش تمام پستها در صفحه blogpost/all.blade.php ایجاد کردیم. در اینجا هم باید از همان نام استفاده کنیم.
حال باید route مدیریت کننده درخواست HTTP/POST را ایجاد کنیم. برای این کار خط زیر را به فایل app/Http/routes.php اضاف کنید.
1 |
Route::post('/post/create', ['as' => 'blogpost.store', 'uses' => 'BlogPostController@store']); |
این route یک درخواست HTTP/POST را به متد store از BlogPostController میفرستد. این درخواست اطلاعاتی که کاربر وارد کرده را با خود دارد.
پس از ایجاد route اگر اطلاعات پست را وارد کنید و دکمه ثبت اطلاعات را بزنید به صفحه نمایش تمامی پستها هدایت خواهید شد و آخرین پستی که ایجاد کرده اید را به همراه تمامی پستهای دیگر خواهید دید.
اگر برای ثبت اطلاعات با مشکلی برخورد کردید با جزییات خطا را کامنت بذارید تا بتونیم سریعتر به رفع مشکل کمک کنیم.
طبق روال گذشته میتوانید پروژه را از ریپازیتوری github لارابوک دریافت کنید.
با تشکر از آموزش خوبتون. منظور از خط اول در صفحه view چیه؟ @extends
امیدوارم مطالب براتون مفید باشه.
@extends از دستورات راهنمای مربوط به موتور پردازنده blade هست و امکان استفاده از صفحه های از پیش طراحی شده به عنوان template رو میده. template ها امکان ساخت یه الگو رو میدن. الگوی ظاهری که توی تمام صفحات باید دنبال بشن. در واقع ساختار کلی صفحات هست و محتوا توی اون قرار میگیره. شما میتونید برای اطلاعات بیشتر در مورد template ها و blade به این آدرس http://larabook.ir/docs/5.0/templates سر بزنید. همینطور برای مطالعه بیشتر در مورد view میتونید این آدرس رو ببینید http://larabook.ir/docs/5.0/views
ممنون از پاسخ شما وسایت بسیار مفیدتون. منتظر ادامه آموزش هستم. پروژه رو از گیت هاب دانلود کردم و کاملا مطالب رو درک کردم.
خوشحالم که آموزشها مفید بوده براتون. برنامه جدیدی برای آموزشها داریم که بتونیم با سرعت بیشتری پیش بریم
سلام. آموزشها بسیار مفید بود.
مشکلی که برای من پیش اومده، اطلاعات فارسی دیتابیس رو نمیتونم درست ببینم و بصورت اعداد و ارقام نشون میده. ممنون میشم کمکم کنید.
باتشکر
خوشحالیم که آموزشها مفید بوده براتون. درست نمیبینید یعنی چی؟ میتونید یه عکس بفرستید برامون؟
بسیار عالی سپاسگذارم برای اطلاعات مفیدتون.
ما هم از شما بسیار سپاسگزاریم که آموزشهارو دنبال میکنید و با نظراتتون بهمون کمک میکنید بتونیم کیفیت مطالب رو بهبود بدیم
سلام. ممنون از آموزش های خوبتون. من یه سوال داشتم متاسفانه هر چی گشتم جای مناسبی برای پرسیدنش پیدا نکردم. تصمیم گرفتم اینجا بپرسم !
همونطور که میدونید هسته اصلی لاراول پوشه vendor هستش. من میخوام چنتا برنامه ی مجزا در یک دامین بسازم بنابراین تصمیم گرفتم همه برنامه ها از یک vendor استفاده کنند. حالا سوالی که برام پیش اومده اینه که آیا این روش درست و اصولی هست یا نه؟
ضمن اینکه با اپدیت شدن composer.json در اپ ۱ پکیج های مربوط به اپ ۲ حذف میشن (چون تو composer.json اپ اول پکیج های اپ ۲ تعریف نشده بنابراین کامپوزر فک میکنه اونا وجود نداره) . ضمنا ۲ تا پوشه vendor هم نمیشه درست کرد تاجایی که من تحقیق کردم!!
نکته بعدی اینکه آیا در پوشه vendor فایل های مختص یک اپ ذخیره میشه؟ مثلا کش یا توکن آی دی یا هر چیز دیگه ای چون در این صورت دیگه پوشه vendor نمیتونه برای همه اپ ها استفاده بشه
سلام
خیلی ممنون از آموزش های خوبتون من از قسمت اول تا اینجا رو دنبال کردم، چون نوشته بودید آموزش صفر تا صد خیلی مشتاق شدم چون من حتی php رو هم تازه شروع کردم
قسمت اول هم خیلی خوب بود و کوچکترین جزئیات رو هم در نظر گرفتید و برای اینکه نوشته بیش از حد طولانی نشه ارجاع های به موقعی به بخش های دیگه دادید، ولی از قسمت دوم و مخصوصا قسمت دوم خیلی از قسمت ها به صورت خلاصه و گنگ تعریف میشه، من واقعا رشته آموزش رو از دست دادم
مثلا تو آموزش این قسمت نگفتید فرم ورود رو تو کدوم فایل ایجاد کنیم،! یا مثلا تو قسمت قبل یه جا گفتید در مدل های رالاول وابستگی ها رو تعریف میکنیم و نگفتید این مدل ها کجاست، و در متن کد آدرس \app\Models وجود داشت که نگفته بودید چی داخل این مسیر قرار داره
ممنون میشم یه مقدار به جزئیات (حداقل با ارجاع به منابع دیگه) توجه بشه ممنون
سلام و ممنون از توجه و نقدی که کردید. البته بعضی چیزها بعد از مدتی و با توجه به توضیحات پایه ای به پیش فرضهای ما تبدیل میشن.