پیاده‌سازی Repository Pattern در لاراول

اگر با فریمورک‌های مختلف مثل laravel کار کرده باشید، اینو می‌دونید که نوشتن یه وب اپلیکیشن یا یه پروژه میتونه خیلی راحت‌تر از زمانی باشه که میخواهید از پایه با کتابخونه‌های خودتون بنویسید. یکی از مزیت‌های مهم استفاده از فریمورک‌ها، مستندات قوی و جامعه پشتیبان اون‌هاست که بهشون قدرت میده و شما هم می‌تونید از این قدرت به نفع خودتون و یا نفع همون جامعه کاربریش استفاده کنید.

در لاراول با استفاده از کتابخونه‌های قوی کارتون خیلی سرعت دارهو به راحتی پیش میره ولی بعضی موقع این راحتی کار دستتون میده. به عنوان مثال به کد زیر دقت کنید:

 

تو کد بالا ما یه کنترلر Post داریم و یه متد index که میشه صفحه اصلی کنترلرمون و توش با استفاده از مدل Post تمام رکورد‌ها رو ریختیم داخل یه متغیر و اونو پاس دادیم به View مون. تا اینجای کار، لذت بخش و آسون بود.

مشکل کجاست؟

مشکل موقعی پیش میاد که بخواهید کدتونو تست کنید. خب تو این مورد انجامش ممکن نیست، چون Dependencyها یا نیازمندی‌های کنترلرمون که از یک کلاس دیگه استفاده می‌کنه تعیین نشده و نمیشه از اون توی تست استفاده کرد. پس به مشکل میخوریم.

یکی دیگه از مشکلات هم برمیگیرده به زمانی که بخواهیم نوع دیتابیسمونو عوض کنیم. مثلن بخواهیم از mongoDB به جای Mysql یا هر نوع دیتابیس از نوع Sql، استفاده کنیم. خب، توی استفاده از انواع Sql دیگر مثل SqlServer یا Postgesql نباید مشکلی باشه و نیازی نیست کدمونو تغییر بدیم ولی اگر به mongoDB بخواهیم کوچ کنیم مجبوریم تمام قسمت‌های کدمونو بازنویسی کنیم که این به دور از اصول توسعه سریع و تمیزه.

راه حل چیه؟

یکی از بهترین راه‌حل ها استفاده از Repository ها برای جدا کردن مدل‌ها از کنترلر‌هامون و مدیریت Dependency Injectionهاست. خب اول باید ببینیم Repository چی کار می‌کنه؟ Repositoryها میان یه واسطی میشن به بخش دیتابیس و کنترلرهامون و مثل یه تونل و فیلتر عمل می‌کنن تا ما از یک نوع کدنویسی و استاندارد برای ارتباط با پایگاه‌های داده اعم از (Redis, Sql, NoSql) استفاده کنیم.

به طور کلی Repositoryها به معنای ارتباط دهنده بین دو چیز هستند.

اگر به واژه رابط یا واسط توجه کرده‌باشد درمی‌یابید که Repository چیزی نیست جز interfaceها. بله، ما به کمک یکی از امکانات شی‌گرایی برای حل این مشکلات استفاده می‌کنیم.

حالا کد بالا رو می‌خواهیم بازنویسی کنیم:

ابتدا یک Repository برای Post ایجاد می‌کنیم:

 

سپس میاییم یک کلاس دیگر که از این interface ارث برده را ایجاد می‌کنیم: (توجه داشته باشید تمام کلاس‌هایی که از interfaceها implement می‌شوند باید تمام متدهایی که در interface نام برده شده‌اند‌ را داخل خودشون پیاده‌سازی کنند:

ما یک کلاس برای کار با انواع دیتابیس Sql ایجاد می‌کنیم و همونطور که میدونید برای این کار از کتابخونه Eloqunet لاراول استفاده می‌کنیم:

 

حالا کنترلرمونو بازنویسی می‌کنیم:

 

همونطور که میبینید دیگه کنترلر ما براش فرق نمیکنه که از چه نوع دیتابیسی استفاده کنه. ما به راحتی می‌تونید کلاس مربوط به اونو بنویسیم و با استفاده از Ioc Container لاراول، اونو به عنوان مدلمون معرفی کنیم.

چیزی که تو این پست نوشتم یه خورده خورده کاری داره مثل bind کردن کلاسمون به interface تا بتونیم تو پروژه‌هامون ازش استفاده کنیم که به صورت تفصیلی تو پست‌های آینده در موردش صحبت می‌کنم. فقط میخواستم یه دیدی از این کار داشته باشید.

اضافه کردن کلاس‌ها و Helperهای شخصی به Laravel

سلام

یکی از ویژگی‌های فریمورک‌ها، قابلیت اضافه‌ کردن کلاس‌ها و کتابخانه‌هاییست که توسط خودتون یا فرد دیگری نوشته شده. لاراول تو این زمینه دستتونو کاملا باز گذاشته.

laravel

یکی از اشکال این کتابخونه‌ها یا کلاس‌ها پکیج‌ها هستند که در آینده در موردشون بیشتر صحبت می‌کنیم. ولی امروز می خواهیم در مورد اضافه کردن کلاس‌های دم دستی و یا Helperها به Laravel صحبت کنیم.

فرض کنید یه سری تابع و متد داریم که برای راحت‌تر شدن کارمون و تمیزکاری اونارو یه جا بنویسم و بعد ازشون استفاده کنیم. راحت‌ترین حالت ممکن اینه که بریناون تابع‌ها رو به فایل route.php, filter.php, start.php و یا هر فایل دیگه‌ای که موقع اجرای لاراول مورد استفاده هستند بنویسم و و در جاهای دیگه ازشون استفاده کنیم. ولی این کار کدمونو کثیف و نامرتب می‌کنه.

برای افزودن یک کلاس Helper به این ترتیب عمل می‌کنیم:

ابتدا یک دایرکتوری به دایرکتوری app اضافه می‌کنیم مثلن به اسم helpers:

 

بعد از اون یه فایل php داخل دایرکتوری مذکور ایجاد کرده و هر اسمی خواستیم روش میذاریم، فقط یادتون باشه بعدن با این اسم کار داریم. مثلن یه فایل میسازیم به اسم Helper.php

بعد از اضافه کردن فایل داخل اون شروع می‌کنیم به نوشتن متدهامون. یادتون باشه اون فایل Helper.php داخلش یه کلاس به همین نام باید باشه اونم از نوع static، به این صورت:

 

هر چند‌تا متد خاصتین میتونین توش ایجاد کنید ولی بازم یادتون باشه باید همشون از نوع static باشن.

حالا تو هر جای پروژه‌تون میتونید به این شکل از کلاس Helperتون استفاده کنید، مثلن:

 

ولی موقع اجرا میبینید که بهتون اخطار میده که همچین کلاسی وجود نداره. خب درسته چون ما این کلاسمونو داخل پروژه load نکردیم. برای این کار فایل composer.json اصلی لاراولو باز می‌کنیم و آدرس فولدر Helperمون رو در قسمت autoload -> classmap اضافه می‌کنیم. مثل این:

 

بعد از اضافه کردن و ذخیره کرده فایل composer.json، ترمینالو باز کرده( جایی که فایل composer.json وجود داره) و عبارت زیر را وارد می‌کنیم:

 

به همین راحتی الان می‌تونید از Helperتون تو پروژه‌تون به راحتی استفاده کنید و یادتون باشه از لاراول لذت ببرین.

معرفی چندتا منبع برای یادگیری لاراول

با سلام

الان حدود ۷-۸ ماهی میشه که با فریمورک محبوب لاراول دارم کار میکنم. زمان شروع لاراول نسخه ۴٫۰ منتشر شده بود و الان نسخه ۴٫۲ که این نشون‌دهنده به‌روز بودن و پویایی این فریمورکه. هدفم از نوشتن این پست، معرفی چند‌تا منبع برای یادگیری و به کارگیری لاراوله.

کتاب

چند تا کتاب خوب در مورد لاراول خوندم که اینجا معرفیشون می‌کنم. البته لینک دانلود نمی‌دم. خودتون برید بگردید پیدا کنید.(راحت‌ترین راهش تورتنه)
نام کتاب: Code Bright Web application development for the Laravel framework version 4 for beginners 
نویسنده : Dayle Rees
انتشارات: leanpub
نام کتاب: Getting Stuff Done with Laravel 4
نویسنده: Chuck Heintzelman
انتشارات: leanpub
نام کتاب: Laravel From Apprentice To Artisan – Advanced Architecture With Laravel 4
نویسنده: Taylor Otwell (خالق لاراول)
انتشارات: leanpub
نام کتاب: Laravel Application Development Cookbook
نویسنده: Terry Matula
انتشارات: Packt
نام کتاب: Laravel 4 Cookbook
نویسندگان: Christopher Pitt – Taylor Otwell
انتشارات: leanpub

وبسایت

laravel.com  – وبسایت رسمی لاراول به همراه داکیومنت‌ها
– http://www.laravel-tricks.com  – کدهای آماده و ترفندهای لاراول
– http://registry.autopergamene.eu – محلی برای دریافت آخرین پکیج‌های نویشته شده برای لاراول
– http://packalyst.com –  محلی برای دریافت آخرین پکیج‌های نویشته شده برای لاراول
– http://laravel.io/forum – انجمن‌های گفتگوی لاراول
– http://cheats.laravel.com – کدهای تقلب یا راهنمای یک صفحه‌ای تمام کتابخونه‌های لاراول
– http://laravel-recipes.com/ – یه سری آموزش‌ها در دسته‌بندی‌های مختلف
– http://laravelsnippets.com – تکه‌کدها و ترفندهای لاراول
laracast.com – محلی برای تماشای آنلاین بهترین آموزش‌های ویدیویی لاراول (اکثرن پولیه آموزشاش)

ویدیو

خودم برای یادگیری لاراول ویدیو نگاه نکردم ولی دو موسسه lynda و tutsplus ویدیو‌های خوبی برای Laravel دارن که میتونین از تورنت بگیرین یا اینکه به صورت آنلاین تو سایتشون نگاه کنین (پولی) یا توی youtube ببینین.

با سلام امروز می‌خوام نحوه نصب و راه اندازی فریمورک محبوب لارول را بر روی ابونتو توضیح بدم البته به طور کاملا خلاصه و مفید. در این آموزش فرض را بر این می‌ذاریم که شما با نحوه راه‌اندازی LAMP آشنا هستید.

مواد مورد نیاز برای نصب لاراول

  1.  composer
  2. php 5..3.7 به بالا
  3. اکستنشن mcrypt برای php
Laravel دو یا سه روش نصب داره که من یکیشو توضیح میدم.
1- ابتدا فایل‌های اولیه لاراول را از سایت رسمی اون دانلود کنید.
2- سپس فایل را از حالت فشرده خارج کنید. در این مرحله یه فولدر می بینید به اسم laravel.
3- این فولدر را هرکجا توی فولدر ریشه وب‌سرورتون بذارید. مثلن برای من توی آدرسه:

4- حالا فولدر اصلی پروژه من این میشه :

5- حلا ترمینالو باز می‌کنیم و دستورات زیر را برای تعیین دسترسی ها وارد می کنید

6- حالا وارد فولدر لاراول می‌شویم و دستور زیر را در ترمینال وارد می‌کنیم تا پکیج‌های مورد نیاز دانلود بشوند:
7- بعد از نصب نیازمندیها، یک کلید مخصوص برای عملیات رمز کردن می‌سازیم:
اگر هم اکنون آدرس http://localhost/laravel/public  را در آدرس-بار مرورگرتون وارد کنین می‌تونین  پیام خوش‌آمدگویی لاراول ر مشاهده کنین.
اگر سوالی در زمینه نصب یا استفاده از این فریمورک محبوب داشتید می‌تونید در بخش نظرات یا تماس با ما مطرح کنید، خوشحال می‌شم بتونم کمکتون کنم. در ضمن داکیومنت سایت لاراول هم منبع بسیار خوبی برای یادگیری و آشنایی با این فریمورک است.