منبع اصلی نوشتار زیر در این لینک قرار دارد

ساخت تصاویر بند انگشتی به وسیله لاراول

سلام اگر طراح وب بوده باشید قطعا با این مشکل دست به گریبان بوده‌اید که حجم تصاویری که می‌خواهید در صفحه وبتان استفاده کنید بسیار زیاد است و این به خودی خود باعث کندی بارگذاری صفحه وب همچنین کاهش بازدید وب سایتتان خواهد بود. خب برای این کار چندین راه حل وجود دارد، ساده‌ترین راه […] ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

ایجاد کنترلرهای منعطف در لاراول با استفاده از Repository‌ها

repository ها در لاراول

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

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

class PostController extends BaseController {
public function getIndex()
{
$posts = Post::all();
return View::make('post.index', compact('posts'));
}

تو کد بالا ما یه کنترلر 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 PostRepository{
public function find($id, array $columns = array('*'));
public function all(array $columns = array('*'));
}

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

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

class EloquentPostRepository implements PostRepository {
public function find($id, array $columns = array('*'))
{
return Post::find($id, $columns);
}
public function all(array $columns = array('*'))
{
return Post::all($columns);
}
}

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

class PostController extends BaseController {
public function __construct(PostRepository $post)
{
$this->post = $post;
}
public function getIndex()
{
$posts = $this->post->all();

return View::make('post.index', compact('posts'));
}
}

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

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

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

فیلترها در کنترلر Yii

فیلترها تکه کدهایی هستند که مشخص می کنند که قبل یا بعد از اجرای یک اکشن در کنترلر کنترلر چه اتفاقی بیافتد. برای مثال بوسیله فیلترها میشه بررسی کرد که آیا قبل از اجرای یک اکشن خاص کاربر لاگین کرده یا خیر. یک اکشن می تواند چند فیلتر داشته باشد. برای پیاده سازی فیلتر، کنترلر […]

The post فیلترها در کنترلر Yii appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نحوه استفاده از Query Builder در Yii 1.1

همانطور که می دانید در فریمورک Yii برای استفاده از دیتابیس سه راه وجود دارد: استفاده از Activr Record کلاس CActiveRecord. استفاده از دستورات داخلی سازنده فرامین دیتابیس معروف به Query Builder (کلاس CDbCommandBuilder). استفاده و اجرای مستقیم دستورات sql که معروف به DAO – Database Access Objects (همان کلاس CDbCommandBuilder). وقتی از ابزار Gii […]

The post نحوه استفاده از Query Builder در Yii 1.1 appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

کار کردن با jQuery UI Datepicker در Yii

همه ما کار کردن با ابزارهای کوچک و ساده و قشنگ را دوست داریم، یکی از آن ابزارها به نام JQuery UI Datepicker به عنوان یک المان ورودی برای تاریخ است. فریمورک Yii نیز این ابزار به عنوان یک ویدجت با نام CJuiDatePicker ارائه داده است. اکنون اجازه بدید با هم نگاهی به نحوه کارکرد […]

The post کار کردن با jQuery UI Datepicker در Yii appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

مثال برای کلاس CFrom

CForm در Yii. مدل: [crayon-53e301a624fa0085606293/] کنترلر: [crayon-53e301a624faa976023257/] ویو: [crayon-53e301a624fb2716316720/] فایل تنظیمات CForm: [crayon-53e301a624fba263372239/] essential-strategy.com/activeform

The post مثال برای کلاس CFrom appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

آپلود فایل در Yii

برای آپلود هر نوع فایلی با فریمورک Yii، به ویژه برای فایلهای تصاویر که استفاده و کاربرد زیادی هم دارند،  از مراحل زیر پیروی کنید. البته باید اشاره کرد که این مراحلی طوری بیان شده اند که هم برای اضافه کردن تصویر جدید و هم برای ویرایش تصویر قبلی کاربرد دارد. مدل(Model) ابتدا با فایل […]

The post آپلود فایل در Yii appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

استفاده از چک باکس به صورت دسته ای

با سلام. در طراحی صفحات وب معمولا برای برخی فیلد های درون فرمها، طراحان نیاز به استفاده از چک باکس دارند تا کاربر  آن ها را تیک بزند، این امر با تگ های ساده HTML به راحتی و با کد زیر قابل اجر است: [crayon-53e301a626831136445307/] اما برنامه نویسان و توسعه دهندگانی که از فریمورک محبوب […]

The post استفاده از چک باکس به صورت دسته ای appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

مدیریت دیتابیس ها با برنامه Yii-Chive

با سلام، دوستانی که برنامه نویسی و به خصوص طراحی وب با php می کنند حتما با برنامه مدیریت بانک های اطلاعات phpMyAdmin که یک برنامه بسیار قوی است آشنایی دارند. اکنون قصد داریم تا برنامه ای را به عنوان جایگزین phpMyAdmin، با همان امکانات ولی با تفاوت هایی در طراحی و ساختار را به […]

The post مدیریت دیتابیس ها با برنامه Yii-Chive appeared first on دست نوشته های یک تازه کار.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

یادگیری فریمورک Yii-بخش ۸

در آغاز سخن، از همه دوستان به خاطر تأخیر پوزش می خواهم، مطالب دیر به دیر آماده می شود. در بخش هفتم این مجموعه سری آموزشی با برخی از موضوعات و مفاهیم آغازین یک برنامه از قبیل روند شروع برنامه، مفهوم خود برنامه، تنظیمات اولیه یا پیش فرض برنامه و ویژگی های مسیر برنامه در […]

The post یادگیری فریمورک Yii-بخش ۸ appeared first on دست نوشته های یک تازه کار.

ادامه مطلب