[rtl]
حدود یکسال پیش مجموعه آموزشی codeigniter رو منتشر کردم که با استقبال خوبی رو به رو شد و همون موقع هم خیلی از دوستان پیگیر بودن برای ساخت مجموعه آموزشی yii2.
کار ساخت مجموعه آموزشی بعد از تعطیلات عید بصورت جدی شروع شد. تجربههای مجموعه قبلی و بازخوردهای دوستان همگی حکایت از آن داشت که باید کاری پر مغز و حرفهای خدمت طرفداران تقدیم شود. این کار مستلزم وجود ساختاری مناسب و روان بود. طوری که هم کسانی که میخواهند بتازگی کار با فریمورک را شروع کنند به مشکل برنخورند و هم برای برنامهنویسانی که شاید سالها با فریمورکهای دیگر کار کردهاند ملالت آور نباشد. در ابتدا بیشتر کتابهای انگلیسی که فریمورکی را آموزش میدادن بررسی کردم همچنین فیلمهای آموزشی شرکت lynda. بدنبال ساختاری محکم همراه با امکان پیادهسازی بر روی yii2 بودم. چند بار هی فیلم میگرفتم و هی پاک میکردم و هنوز به نقطه دلخواهم که نیاز همگان را برآورده کنم نرسیدم. در آخر بعد از حدود دو هفته کلنجار رفتن و وسواس زیادی بر روی ساختاری که هم آموزش بصورت درس باشد و هم کارگاه با خودم به توافق رسیدم.
همانطور که گفتم این مجموعه آموزشی از دو قسمت درس و کارگاه تشکیل شده. البته قسمت درس به معنای آن نیست که من از جلوی چشمان شما فقط اسلاید میگذرانم و یا در کارگاه با سرعت بالا فقط کد مینویسم. بلکه مجموعه اسلایدی از خود مستندات yii2 گردآوری کردهام و همانها برای آموزش درس استفاده شده است. هدف از این کار هم آشنا کردن دوستان با متون رسمی yii2 و توانایی ادامه راه بدون داشتن مجموعه آموزشی بود. در واقع هدفم ترجمه یا انتشار مجموعهای صرفا فارسی نبود که بگویم حالا شما بینیاز از مستندات و راهنمای اصلی هستید، بلکه کار آموزش تمام قسمتها را انجام دادهام ولی برای مطالعه بیشتر و کسب تجربیات باید مستندات اصلی را بخوانید و از آنجایی که فصلهای آموزشی مطابق با مستندات اصلی هستند، برای شما مشکلی در یادگیری نخواهد بود.
در کارگاهها هدف ساخت یک cms ساده دنبال میشود. این cms آماده هست حتی قبل از ادامه متن میتوانید آنرا دانلود و نصب و استفاده کنید. البته اگر بگوییم به معنای واقعی الان یک cms آماده کردهام همانند wordpress کمی اجحاف شده ولی حداقل نیازها را در نظر گرفتهام و آنرا برآورده کردهام. در cms تمام قسمتهای فصلها را بصورت عملی خواهید داشت و در انتها همان آموزشها برای کسب تجربه استفاده خواهد شد.
با جداسازی فصلها و کارگاه هدف دیگری هم داشتم. عدهای از دوستان اصلا حوصله دیدن مدارم را ندارند و بر عکس عدهای اصلا درس دادن را دوست ندارند و بقول دوستان "یا علی مدد بریم cms بنویسیم" این یعنی کار عملی در مقابل درس. پس نیاز بود به شکلی هر دوی این گروها را رازی نگه دارم. البته وقتی حرف از درس دادن میشود همه ما یاد چرت شیرین سر کلاسهای درس بعضی اساتید میفتیم. حتی بهترین کلاسها و کلاسدرس بهترین اساتید هم باز هم چرت میچسبید پس باید درسها طوری ساخته میشد که کسی چرتش نگیرد(مثلا فیلمها با صدای بلند و فریاد زدن).
پس باید در درسها هم کار عملی ولی بصورت هدفهای کوتاه میبود. شما در طول درسها هم کارگاههای کوچکی دارید. این که نمیشود من اسلاید بسازم و مدام در ویدیو شما صدای من را بشنوید همراه با اسلایدی که حرکت میکند. ولی مساله مهم زمان بود. بیشتر زمانها بصورت زیر باید تفکیک میشد:
ساخت اسلاید. طوری که هم مستندات اصلی در آن باشد و هم هدف مجموعه آموزشی در آن دنبال شود
ساخت و پروراندن نمونه فیلمی برای تمرین که در طول آموزش بصورت روان جلو رود بدون این که خطایی پیش آید
آموزش و ساخت فیلم
حذف قسمتهای زاید یا غیرلازم که نبودش بهتر از بودنش بود
جمع آوری و آرشیو کدها و اسلاید و فیلمها
آموزش از روی اسلاید در هر کدام از فیلمها حدود ۲ دقیقه هم نمیشود و خیلی سریع به میرویم روی کدنویسی. مثلا در فصل ۱۲ شما با نحوه ساختن ماژول و extension آشنا میشوید در قسمت extension حدود ۲ دقیقه به معرفی و روش ساخت extension میپردازم و بعد بصورت عملی به سمت ساخت یک extension برای rss میرویم. از دانلود نمونه کلاسی در phpclasses.org شروع میشود و تا ساخت و انتشار آن بر روی github و packagist.org تمام میشود. تا آنجا که توانستهام در طول درس مخاطب را وادار کردهام که دست به کد شود و ادامه بدون کدنویسی مقدور نخواهد بود.
چرت دومی هم بود و آن طولانی بودن زمان هر درس. نباید هر درس زمانی داشته باشد که باعث رنجش خاطر عزیزان شود و اگر هم قرار بود هر قسمت آموزشی از ۱۰ یا ۲۰ دقیقه تجاوز کند، بسته به حجم مطالب و کدهای لازم باید این کار انجام میشد. پس تلاشی هم جهت کنترل زمان داشتم و خدا رو شکر تمام فصلها و کارگاه ها، تمام موارد آموزشی تفکیک شده و هر فیلم بین ۱۰ تا ۲۰ دقیقه است و چند فیلم بین ۳۰ تا ۳۵ دقیقه که آن بسته به حجم مطالب آموزشی زیاد شده است. پس امیدارم حسابی چرت عدهای را پرانده باشم. چرا که هم مشکل صرفا دیدن و شنیدن حل شده بود و هم مشکل طولانی بودن زمان آموزش.
بعد از گذشت حدود دو ماه فقط ۳ فصل آماده شده بود و همان موقع گفتم این مجموعه اگر همین طور پیش رود تا ۱۲ ماه هم تمام نخواهد شد. پس باید حمت میکردم و تمام تعطیلات و روزها جمعه را به این مجموعه اختصاص میدادم. از یک طرف ساختاری چیده بودم که هر روز مرا به ساخت ویدیوهای با کیفیت بیشتر میکشاند(وسواسی که حتی بعضی قسمتها چندین بار دوباره ساخته میشد) واز طرف دیگر سیل دوستانی که هر روز خبر از yii2 میگرفتند.
این مجموعه جزوی از زندگی من بوده و هست و من ۵ ماه با آن خاطره دارم. روزهای سخت و راحت. روزهایی که حسابی خسته بودم ولی باید آماده میشدم برای تهیه ویدیو. روزهایی که تعطیلات بود و خدمت به خانواده و لپتاپی که از من جدا نشد چرا که بهترین زمان برای تهیه اسلایدها و تست موارد آموزشی بود و خلاصه تمام زحمتهای همسر عزیزم که همیشه پشتیبان من بود.
هم اکنون خوشحالم که با تمام پستی و بلندیها این مجموعه آماده انتشار است. سخن ها بسیار است و شاید در پستهای دیگر از خاطراتم گفتم. پس به معرفی فصلها میپردازم.
فصل اول. نصب و آماده محیط توسعه برای yii2
در مدتی که مجموعه ci در اختیار دوستان بود خیلی از دوستان مشکلشان فهم مطالب و یا کد نبود بلکه مشکل بالاتر در محیط توسعه بود. نمیگویم ویندوز مناسب نیست و یا لینوکس الان مدینه فاضله است. بلکه چه ویندوز و چه لینوکس باید محیط مناسبی برای توسعه داشته باشید. اگر از تمام برنامهنویسان حرفتهای بپرسید کسی لپتاپ کار خود را پذیرای هزاران ماژول و وبسرور نخواهد کرد. مثل این میماند که شما قصد تکه کردن گوشت دارید ولی بخای گوشت کوب از یکی از دستان خود برای این کار استفاده کنید. به عنوان برنامهنویس باید محیطی داشته باشید که بتوانید با آزادی خیال به کار طراحی و توسعه بپردازید. این کار جز با به خدمت گرفتن محیط های مجازی امکان ندارد. الان هم که دیگر همه از نظر سختافزاری مشکلی ندارند. در این مجموعه بهترین محیط طراحی و توسعه بنام vagrant آموزش داده میشود همچنین از پایه با نصب و راهاندازی یک سرور لینوکسی و این که چطور به نصب و تنظیمات پایه بپردازید. این نصب و کانفیگها همه بر روی ماشین مجازی صورت میگیرد و هیچ آسیبی به ویندوز شما نمیرسد همچنین تمام مراحل نصب و راه اندازی بر روی تمام سیستمعاملها یکشان است.
۱-۱. نصب virtualbox , vagrant و ساخت یک نمونه vm اوبونتوی 12.04
۱-۲. نصب php,mysql,apache بر روی لینوکس اوبونتوی 12.04
۱-۳. تنظیمات پایه و تنظیم ارسال ایمیل از سیستم خودتان
۱-۴. نصب و تنظیم phpmyadmin
۱-۵. نصب و تنظیم composer و نحوه نصب yii2 به کمک composer
۱-۶. نصب تمام موارد گفته شده بصورت offline برای آن عده از دوستانی که همزمان دسترسی به اینترنت ندارد و نصب yii2 بصورت آرشیو دانلود شده.
فصل دوم. گذری سریع بر yii2
این فصل را میتوان فصل تصمیم گیری دانست. بصورت سریع شما را بعضی از قسمتهای yii2آشنا میکند و میتواند نظر شما را جلب کد که yii2 واقعا قوی است. این فصل با ساخت دستی کنترلر و مدلها شروع شده و به استفاده از ابزار gii تمام میشود.
۲-۱. ساختار فایلها و فولدرهای yii2
۲-۲. ساخت دیتابیس و تنظیمات pdo و نمونه کنترلر برای ثبت پست در cms
۲-۳. ساخت فرم برای کنترلر پست
۲-۴. استفاده از active record برای ثبت پست جدید در دیتابیس
۲-۵. ابزار gii و ساخت موارد بالا بصورت سریع به کمک این ابزار(بجای نوشتن موارد تکراری).
فصل سوم. مفاهیم پایه در yii2
حالا که به این فصل رسیدهاید پس فصل دوم توانسته شما را به ادامه فصلها متقاعد کند. اما برای ادامه شما باید نکات و مفاهیمی را یاد بگیرید. این که اصلا منظور controllerو model چیست؟ چگونه yii2 لود و اجرا میشود؟ موارد session , cookie در yii2 به چه صورت است؟ و خلاصه ریز مواردی که نیاز بود در ابتدا یاد بگیرید.
۳-۱. نحوه لود شدن yii2
۳-۲. مفهوم alias در تنظیمات
۳-۳. استفاده از catchAll به عنوان یک مورد اضطراری
۳-۴. controllMap و نحوه استفاده از آن
۳-۵. مفهوم ماژول پر yii2
۳-۶. استفاده از پارامترهای عمومی از طریق تنظیم params
۳-۷. مفهوم extension در yii2
۳-۸. کنترلر و تنظیمات در آن
۳-۹. مدلها و موارد مربوط به model
۳۰-۱۰. views و جزئیات نمایش دیتا
۳-۱۱. ماژولها. بیان مفاهیم پایه
۳-۱۲. ویجتها در قسمت view
۳-۱۳. نحوه لود css و js در صفحه. بررسی جزئیات assets
۳-۱۴. request و بررسی پارامترهای هنگام ارسال درخواست
۳-۱۵. response و بررسی پارامترهای هنگام دریافت جواب از سرور
۳-۱۶. session
۳-۱۷. cookie
۳-۱۸. بررسی خطاها و لاگها
فصل چهارم. دیتابیس
معمولا در برنامههای تحت وب دیتابیس کاربرد بسیار زیادی دارد. لذا بعد از این که در فصلهای قبل کمی با yii2 آشنا شدید نوبت به نحوه تعامل با دیتابیس است.
۴-۱. معرفی آبجکت dao
۴-۲. نحوه query بوسیله dao
۴-۳. bind کردن پارامتر
۴-۴. فرستادن query بدون گرفتن مقدار
۴-۵. استفاده از prefix در ارتباط با دیتابیس
۴-۶. transaction بیان مفاهیم و نمونه عملی
۴-۷. isolation و بررسی انواع آن
۴-۸. ساخت query به کمک امکانات yii2
۴-۹. متد from
۴-۱۰. متد where
۴-۱۱. استفاده از hash
۴-۱۲. order,group by و having
۴-۱۳. join و بررسی امکانات join بین جداول در yii2
۴-۱۴. union کوئری
۴-۱۵. بررسی active record
۴-۱۶. فرستادن query به کمک active record
۴-۱۷. استفاده از batch query
۴-۱۸. بررسی save,validation,message,update و delete در اکتیو رکورد
۴-۱۹. بررسی validation
۴-۲۰. تغییرات در نمایش خطای validation
۴-۲۱. massive assignmentدر اکتیو رکورد
۴-۲۲. بدست آوردن تعداد رکوردها update شده
۴-۲۳. update گروهی چند ردیف توسط updateAll
۴-۲۴. حذف رکورد از جدول به کمک active record
۴-۲۵. transaction به کمک active record
۴-۲۶. استفاده از امکانات relation در active record
فصل پنجم. فرم
بعد از فراگیری ارتباط با دیتابیس و نحوه فرستادن دستورات CRUD به سمت دیتابیس باید فرمی برای ویرایش، اضافه کردن و حذف داشته باشید. این فصل به مکانیزمهای ساخت فرم میپردازد.
۵-۱. ساخت فرم
۵-۲. بررسی اضافه کردن ruleها بخش اول
۵-۳. بررسی اضافه کردن ruleها بخش دوم
۵-۴. بررسی ruleها بخش سوم
۵-۵. آپلود فایل به کمک فرمهای Yii2
فصل ششم. نمایش داده
معمولا در برنامهنویس بیشترین ابزاری که خیلی مورد نیاز است، ابزارهای نمایش داده است. از گرید ویو گرفته تا لیست همگی جزوی از نیازها میباشد و چه دردسرها که برنامهنویسان برای استفاده از گریدها و لیستها نمیکشند. در yii2 ابزارهای بسیار خوبی برای grid,list,pagination و detail view دارد.
۶-۱. internationalization برای ساخت نرمافزارهای چند زبانه و بینالمللی
۶-۲. فرمت دادهها مثل ارزی، متراژی و…
۶-۳. صفحه بندی به کمک ابزار pagination
۶-۴. نمایش جزئیات به کمک detail view
۶-۵. ساخت داده برای گرید و لیست به کمک data provider
۶-۶. list view
۶-۷. grid view
فصل هفتم. کارگاه شماره۱(ساخت یک cms با امکانات اولیه نمایش و ثبت داده. همراه با پنل ادمین)
بعد از طی کردنفصلهای قبلی اکنون تا حدودی با امکانات و ابزارهای yii2 آشنا شدهاید. شما اکنون میتوانید یک cms با امکانات حداقلی ایجاد کنید. در این کارگاه همچنین با موارد جدید مثل route,captcha,pjax,navigation و نحوه طراحی سایت چند زبانه آشنا میشوید.
۷-۱. نصب و راهاندازی یک پروژه با yii2
۷-۲. تنظیمات عمومی
۷-۳. برگرداندن bootstrap به حالت rtl با تغییرات در assets
۷-۴. قالب بخش وبلاگ
۷-۵. قالب بخش ادمین
۷-۶. تنظیمات دیتابیس
۷-۷. کاربران بخش ادمین
۷-۸. نمایش پست در ادمین
۷-۹. کامنت در بخش ادمین
۷-۱۰. نمایش پست در وبلاگ
۷-۱۱. نمایش یک پست در وبلاگ
۷-۱۲. نمایش پست بصورت seo بهینه از طریق دستکاری route در yii2
۷-۱۳. نحوه فرستادن query نمایش پست در وبلاگ
۷-۱۴. کامنت در وبلاگ و نحوه نمایش آنها
۷-۱۵. استفاده از ajax برای ثبت کامنت جدید(بررسی ابزار pjax)
۷-۱۶. اضافه کردن کپچا برای ثبت کامنت
۷-۱۷. سایت چند زبانه بخش اول
۷-۱۸. سایت چند زبانه بخش دوم
۷-۱۹. سایت چند زبانه بخش سوم
۷-۲۰. ابزار منو و navigation
۷-۲۱. ساخت category برای cms
فصل هشتم. امنیت
هر ابزار تحت وبی باید حداقل امنیت را داشته باشد. البته بصورت عمومی تعیین هویت کاربران در ورود به پنلها جزو موارد ضروری است. همچنین نحوه ذخیره رمز عبور کاربران در دیتابیس، سیستمهای تعیین سطح دسترسی، کد کردن دادههای حساس و تولید رشتههای تصادفی برای موارد مورد نیاز در این فصل بررسی میشود.
۸-۱. بررسی کلاس user در yii2
۸-۲. تنظیمات user
۸-۳. متد user
۸-۴. بررسی لاگین user
۸-۵. تعیین هویت authorization
۸-۶. تنظیمات تعیین هویت
۸-۷. سیستم rbac
۸-۸. تنظیمات برای راهاندازی سیستم rbac
۸-۹. داده اولیه برای سیستم rbac
۸-۱۰.استفاده از rule در سیستم rbac
۸-۱۱. کد کردن و دیکد دادهها در yii2
۸-۱۲. امنیت در پسورد
۸-۱۳. تولید رشته تصادفی
فصل نهم. کش
با کمی صرف وقت و دقت میتوانید فشار کاری سرور را کم کنید و دادههایی را که مکررا مورد دسترسی قرار میگیرند را کش کنید. در این فصل به موارد نصب و استفاده از سیستمهای کش میپردازد.
۹-۱. تعریف سیستمهای کش
۹-۲. دیتا در کش
۹-۳. نصب ابزار memcache
۹-۴. تنظیمات memcache و استفاده از آن
۹-۵. توابع در دسترس برای کش
۹-۶. کش متراکم یا fragment cache
۹-۷. کش کردن کامل یک صفحه
۹-۸. کش بر روی http
فصل دهم. وبسرویس
معمولا در تولید سامانههای بزرگ نیاز به ساخت ابزارهای جانبی هم هست. مثلا ساخت نرمافزار آندروید برای یک سایت. این موراد ارتباطی باید با وبسرویس انجام شود. این فصل به نصب و راهاندازی یک وبسرویس میپردازد.
۱۰-۱. معرفی وبسرویس و امکانات yii2 برای راهاندازی وب سرویس
۱۰-۲. ساخت وبسرویس و نحوه تست آن
۱۰-۳. لاگین و موارد امنیتی در وبسرویس(تعیین هویت کاربران در وب سرویس)
فصل یازدهم. کارگاه دوم (اضافه کردن امنیت به cms)
در طی فصلهای گذشته توانستهاید امنیت، کش و وب سرویس را فرا بگیرید. موارد کش و وب سرویس جزو ضروریات یک cms به حساب نمیآیند ولی امنیت را حتما باید اضافه کنید.
۱۱-۱. نمایش دموی انجام شده از سیستم امنیت cms
۱۱-۲. تنظیمات اولیه برای راهاندازی rbac
۱۱-۳. اضافه، حذف و ویرایش رول به کاربران
۱۱-۴. اختصاص یک نقش به کاربر
فصل دوازدهم. ماژول و extensions
ماژول یک زیر سیستم از سیستم اصلی و میتوانید حتی نرمافزارهای بزرگ را به قسمتهای کوچک تبدیل کنید. extension از ابزارهای جانبی که بصورت کلاسهای واحدی که میتوانند در هر کجای فریم ورک صدا زده شوند و برای شما کار بخصوصی را انجام دهند. مثلا extension برای ویرایش تصاویر.
۱۲-۱. تعریف ماژول و نحوه نوشتن یک ماژول
۱۲-۲. ساخت یک نمونه ماژول
۱۲-۳. تعریف و نحوه نوشتن extension
۱۲-۴. ساخت یک extension از روی کلاسی که از phpclasses.org دانلود میشود همراه با ثبت در github و packagist.
فصل سیزدهم. تست و باگگیری
در yii2 ابزارهای برای تست و دیباگ برنامه وجود دارند. در این فصل به نحوه فعالسازی و استفاده از این ابزارها میپردازیم.
۱۳-۱. ابزارهای تست و نحوه نصب و فعالسازی codeception
۱۳-۲. ابزار debug
فصل چهاردهم. کارگاه سوم. (انتشار برنامه-ساخت فایل install برای مکانیزه کردن مراحل نصب)
بعد از پایان تمام فصل های تا حدودی یک cms جمع و جور را آماده کردهاید. اکنون در این کارگاه به مراحل ساخت یک فایل install برای مکانیزه کردن مراحل نصب و انتشار برنامه میپردازیم.
۱۴-۱. ساخت فایل install.php و انتشار برنامه.
همراه همین پست یه فایل txt پیوست شده که لینکهای دانلود از drop box,google drive,uploadboy و ۲ سرور مستقیم هست.
همیشه نظرات خوب شما عزیزان باعث ادامه راه بوده و هست. منتظر نظرات، انتقادات و سوالات شما دوستان هستم. از طریق آدرسهای زیر میتوانید با من در ارتباط باشید
شماره همراه: ۰۹۳۷۴۶۹۳۴۹۳
ایمیل: mehrdad.seifzadeh@gmail.com
[/rtl]