در این نوشته می خواهیم آنچه که تا کنون درباره کنترل گر، نماها، Route ها و Query Builder گفته ایم را بررسی دوباره کنیم. در این نوشته نخست نیاز است تا چندین مسیر (Route) را ایجاد کنیم. سپس نیاز است یک کنترل گر ایجاد شده که درون آن از متدهای Query Builder برای ارتباط با پایگاه داده کمک گرفته می شود. همچنین نیاز به نماهایی است که درون آن ها جدولی برای نمایش داده ها و فرم اچ تی ام ال برای بروز رسانی داده ها خواهد بود.

گام نخست – ایجاد مسیرها

در نوشته های زیر درباره مسیرها در لاراول گفته ایم. مسیرها در فایل web.php نوشته می شوند و یک مسیر می تواند بدست یکی از متدهای ()get یا ()post یا ()put یا ()delete و … از کلاس Route پدید آید. در این نوشته می خواهیم درون مسیر http://localhost:8080/user می خواهیم جدولی از همه کاربران نگهداری شده در جدول users را نشان دهیم. در مسیر دیگر با الگوی http://localhost:8080/user/id می خواهیم داده های کاربر با شناسه id پایان مسیر را نشان دهیم و همچنین می خواهیم فرمی نشان داده شود که داده های همان کاربر را بروز کنیم.

لاراول -مفهوم Route

لاراول – نوشتن Route

لاراول – Route ها با پارامترهای اختیاری

لاراول – استفاده از عبارت با قاعده در Route

در شکل بالا سه مسیر از تازه پدید آورده ایم که نخستین آن از گونه متد ()get و برای مسیر http://localhost:8080/user است. هرگاه این مسیر در مرورگر نوشته شود، پس باید فهرست همه کاربران درون جدول اچ تی ام ال نشان داده شود. دو مسیر دیگر یکی هستند و به مسیر با الگوی http://localhost:8000:/user/id اشاره دارند. پارامتر id برابر با شناسه کاربری درون جدول پایگاه داده است.

در دومین مسیر نوشته شده، پارامتر id در مسیر دریافت شده و سپس بر اساس متد GET در پروتکل HTTP از این مقدار دریافت شده بدست نشانی URL، یک پرس و جو به پایگاه داده فرستاده می شود تا کاربری پیدا شود که مقدار ستون id آن برابر با عددی باشد که از درون نشانی URL فرستاده ایم. همچنین اگر شماره فرستاده شده درون پایگاه داده باشد، پس باید در برگه وب دیگری داده های کاربر به همراه فرم های اچ تی ام ال نمایش داده شوند ولی اگر کاربری با شناسه فرستاده شده درون جدول نبود، پس باید برگه خطای 404 نشان داده شود.

متد ()get از کلاس Route شیوه GET از پروتکل HTTP را پیاده سازی می کند. این متد برای دریافت داده ها از نشانی URL به کار گرفته می شود. در برابر آن، متد ()post از کلاس Route شیوه POST از پروتکل HTTP را پیاده سازی می کند. این متد برای دریافت داده ها از فرم های اچ تی ام ال به کار گرفته می شود. در نوشته های زیر متدهای GET و POST در پروتکل HTTP در زبان پی اچ پی آموزش داده شده اند.

فرستادن داده بوسیله آدرس URL به سایت – متد GET

گام دوم – ایجاد فایل کنترل گر

در بخش استفاده از کنترل گرها به جای تابع های بی نام از نوشته لاراول -مفهوم Route چگونگی به کار بردن کنترل گرها در مسیرهای لاراول را آموزش داده ایم. در اینجا می خواهیم کنترل گری به نام UserContoller پدید بیاوریم. برابر با شکل بالا، این کلاس کنترل گر باید دارای سه متد به نام ()index و ()prifile و ()userUpdate باشد. دستور زیر را برای پدید آوردن آن به کار ببرید.

هرگاه که نشانی http://localhost:8000/user در مرورگر نوشته شود، پس باید متد ()index از کلاس UserContoller فراخوانی شود زیر در نخستین مسیر نوشته شده برای این نوشته، نخستین آرگومان برابر با رشته user و دومین آرگومان برابر با رشته UserController@index است.  شکل زیر کدهای این کلاس را نشان می دهد.

در شکل بالا نخست بدست متد ()select سه ستون id و name و email از جدول users برگزیده و سپس با فراخوانی متد ()get همه سطرها برگشت داده می شوند. متغیر usersList$ از گونه Collection خواهد بود، پس می توانیم متد ()count را با آن فراخوانی کنیم. سپس یک متغیر آرایه انجمنی پدید می آوریم که دارای دو کلید به نام usersList و usersCount است که مقدار این دو کلید به ترتیب برابر با مقدار متغیرهای usersList$ و usersCount$ است. این متغیر همانی است که می خواهیم مقدار هر کدام از کلیدهای آن را درون فایل نما نشان دهیم. فایل نما برای این متد index.blade.php نام دارد که در زیر پوشه views/user است. شکل زیر ساختار فایل های نما را نشان می دهد. برای فرستادن داده از متد ()with کمک گرفته ایم که در پیوند زیر آموزش داده شده است.

لاراول – نوشتن اولین کنترل گر

گام سوم – ایجاد فایل نما

در کد شکل زیر نخست می خواهیم فایل لایه پایه و اصلی همه نماهای مربوط به این برنامه را پدید بیاوریم. همه نماها در پوشه یا زیر پوشه های درون resources/views نگهداری می شوند. در گام نخست یک پوشه به نام users زیر پوشه views پدید بیاورید. سپس یک زیر پوشه به نام layouts درون پوش users و در پایان یک فایل به نام user.blade.php پدید آورید. شکل بالا ساختار آنها را نشان می دهد.

شکل زیر درون فایل user.blade.php در زیرپوشه های resources/views/users/layouts را نشان می دهد. این فایل لایه بندی پایه و اصلی دیگر فایل های مربوط به همه مسیرهای مربوط به نمایش و بروز رسانی کاربران را مشخص می کند. در خط دوم و درون تگ html، یکی از متدهای لاراول به نام ()getLocale را به کار برده ایم. این متد بخشی از ویژگی های محلی سازی (localization) در لاراول است. اگر زبان پیش فرض سایت یا برنامه نوشته شده به لاراول انگلیسی باشد، پس ()getLocale مقدار رشته en را برگشت می دهد.

در این نوشته می خواهیم قالب برنامه را بر اساس Bootstrap پدید بیاوریم پس در خط ۵ و در تگ link لینک فایل css مربوط به Bootstrap را به درون فایل لایه پیوست کرده ایم. همچنین در خط های ۱۲ و ۱۳ و ۱۴ و بدست تگ script سه فایل جاوا اسکریپت مربوط به Bootstarp را به فایل پیوست کرده ایم.

در خط های ۶ و ۱۰ به ترتیب از عبات yield را برای نشان دادن دو بخش از لایه کمک می گیریم که هر یک بخشی از لایه را نشان می دهند که محتوایی ویژه را نمایش خواهند داد. در نوشته لاراول – ایجاد قالب ها توسط Blade درباره آن آموزش داده ایم. در بخش title می خواهیم نام  کاربری را نمایش دهیم که از پایگاه داده بدست آورده ایم. در واقع می خواهیم مقدار ستون name از جدول users را نشان دهیم. در بخش content می خواهیم همه محتوای برگه که شامل مقدارهای برگشتی از جدول و فرم های اچ تی ام ال می شود را نشان دهیم.

لاراول – نقش فایل نما و Blade

لاراول – عبارت های شرطی و تکرار در Blade

لاراول ضمیمه کردن یک نما درون دیگری با include@

در گام پسین باید این فایل لایه را درون دیگر فایل های نما مربوط به برنامه نمایش و بروز رسانی کاربران پیوست کنیم. در نوشته لاراول – ایجاد قالب ها توسط Blade درباره چگونگی توسعه دادن یا extend کردن فایل نماها گفته ایم. توجه کنید که چون داریم بر روی فایل لایه (Layout) کار می کنیم و قرار است فایل لایه پایه ای برای دیگر فایل های نمای مربوط به برنامه باشد، پس با پیوست کردن این فایل با دستور extend@، تمامی محتوای فایل لایه شامل مقدار برگشتی متد ()getLocale و تگ های link و script و دو بخش تعیین شده با عبارت yield د دیگر بخش ها و تگ ها، به درون هر کدام از فایل های نما پیوست می شوند. 

در این پروژه ساده به دو فایل نما به نام های index.blade.php و profile.blade.php نیاز داریک که آنها را باید درون پوشه users پدید بیاوریم. فایل index.blade.php زمانی نشان داده می شود که در مرورگر درخواست مسیر http://localhost:8000/user را داده باشیم. به عبارت دیگر برابر با نخستین شکل بالا درباره فایل web.php، نخستین مسیر نوشته شده برای پروژه، مسیر user است که به متد ()index از کلاس UserController اشاره دارد. زمانی که این مسیر درخواست می شود، پس نخست متد ()UserController@index فراخوانی شده و در پایان باید فایل نما users.index نشان داده شود. عبارت user.index اشاره به این دارد که فایل نمایی به نام index.blade.php در زیر پوشه users باید نشان داده شود. شکل زیر درون این فایل را نشان می دهد.

شکل بالا را به هفت بخش دسته بندی کرده ایم. نخست باید لایه ای که پیش از این در فایل user.blade.php پدید آورده بودیم را با دستور ()extend@ به درون هر کدام از فایل های نما نمایش و بروز رسانی کاربران پیوست کنیم. رشته users.layouts.user به این اشاره دارد که فایلی به نام user.blade.php در زیر پوشه های users/layouts باید به این فایل پیوست شود.

بخش دیگری که از لایه مقداردهی کرده ایم، content نام دارد که از خط ۵ آغاز و تا پایان کد (خط ۳۴) ادامه دارد. آغاز با دستور ()section@ و پایان با دستور endsection@ است. در متد ()index از کلاس UserController که در شکل همین نوشته نشان داده ایم، متغیر آرایه ای به نام data$ را بدست متد ()with به نما به نام index.blade.php فرستاده ایم. در بخش ۴ و خط ۹ از شکل بالا با دستور ()if@ بررسی می کنیم که آیا که آیا متغیر userList$ تهی است یا نه؟ توجه کنید در اینجا و درون نما متغیر usersList$ نام کلیدی از آرایه data$ است. اگر متغیر usersList$ خالی باشد، پس هیچ کاربری نیست.

اگر متغیر usersList$ خالی نباشد، پس در خط ۱۲ مقدار متغیر دیگری به نام usersCount$ نشان داده می شود که این متغیر درون متد ()index ایجاد شده بود که مقدار اندازه متغیر usersList$ یا تعداد سطرهای برگشتی از جدول که همان تعداد کاربران است را نشان می دهد. البته می توانستیم تعداد سطرهای برگشتی یا اندازه متغیر usersList$ را همین جا در فایل نما نیز بدست آوریم. کد زیر می توانید جایگزین خط ۱۲ از شکل بالا شود.

در بخش ۵ و با کمک گرفتن از دستور ()foreach@ و تگ table می خواهیم یک جدول ایجاد کنیم که دارای سه ستون به نام Name و Email و User Edit است و هر سطر آن یکی از سطرهای جدول را نشان می دهد. در پیمایش متغیر usersList$ هر عنصر آن درون متغیر user$ ریخته می شود و سپس درون تگ های tr و td هر سطر ایجاد می شود. در مقدار ستون Name مقدار کلید name از آرایه user$ و در ستون Email مقدار کلید email از رایه user$ نگهداری می شود.

متد ()url در لاراول

ستون سوم هر سطر از جدول، لینک (تگ a) است که با کلیک روی آن به برگه تازه ای می رویم که در آن نخست باید داده کاربری نمایش داده شود که شناسه id آن در آدرس URL است. در واقع در بخش ۵ یا خط ۲۷ از کل بالا می خواهیم نشانی URL ایجاد کنیم که شامل شناسه یا id کاربر باشد که از پایگاه داده بدست آورده ایم.

کد زیر خط ۲۷ از شکل بالا را نشان می دهد که عبارت لاراول را به عنوان مقدار به ویژگی href تگ a فرستاده ایم. گفتیم که برای نمایش یک مقدار در نماهای لاراول، باید دستور پی اچ پی را در میان دو تایی های {{ }} قرار دهیم. متد ()url دو ورودی دریافت کرده است. نخست نام یک مسیر که در فایل web.app نشان داده بودیم و دیگری مقداری است که شاید مسیر نیاز داشته باشد.

در کد بالا می خواهیم نشانی URL برای مسیر user ایجاد شود به عبات دیگر به دنبال مسیر http://localhost:8000/user هستیم با این نکنه که می خواهیم مقدار user->id$ نیز به انتهای آن افزوده شود تا در پایان نشانی با الگوی http://localhost:8000/user/id داشته باشیم که اشاره به کد زیر در فایل web.php دارد که یکی از مسیرهایی بود که تعریف کرده بودیم.

بنابراین هرگاه در ستون Edit User روی لینک Edit کلیک کنید، لینکی ایجاد می شود که شما را به برگه تازه ای خواهد برد که در آدرس آن برگه شناسه کاربر هست و سپس در کدهای دیگری نخست  با کمک این شناسه فرستاده شده در URL می خواهیم داده های همان کاربر را دوباره از جدول بدست آوریم و سپس فرم های اچ تی ام ال را برای بروز رسانی برخی داده های کاربر نشان دهیم. کدهای مربوط به این بخش در نوشته پیسین نشان داده شده است.