سلام ;
برای یک برنامه نویس سخت و زجر آور است که یک نوع سایت و برنامه را برای n بار از اول بنویسد.آن هم برنامه ای که کدها و بخش نمایش(html) آن درهم باشد! آیا تا به حال به این فکر کرده اید که چطور می توانید بخش طراحی را از کد نویسی جدا کنید؟اگر پاسخ شما بله است پس این مقاله برای شما نوشته شده است ! می خواهیم با شما در مورد یک چارچوب (framework) قدرتمند و رایگان صحبت کنیم(گرچه خودم تازه شروع به یادگیری کرده ام !) که با یادگیری آن ،نه تنها در زمان صرفه جویی خواهید کرد بلکه کیفیت و کلاس کاری تان را نیز تا سطح بالایی ارتقا خواهید داد.بنابراین به راحتی بنشینید و با ما همراه باشید در “چگونه با فریم ورک zend کار کنیم؟”
چرا باید از Zend Framework استفاده کنیم ؟
بزرگترین هدف ما در استفاده از CMF یا (Content Managment Framework) برای صرفه جویی در زمان است.با استفاده از این گزینه شما می توانید به اهداف زیر دست پیدا کنید:
1.یک ساختار دائمی برای همه پروژه های شما.مشکل اکثر پروژه های وب یک چیز است:عدم وجود یک ساختار ثابت .ابتدا شما تمام توابع مهم را در یک ماژول قرار می دهید.در پروژه بعدی متوجه می شوید که اشتباه کرده اید و تصمیم می گیرید همه چیز را تغییر دهید.به این ترتیب در طی زمان و انجام پروژه های بیشتر ،سطح دانش شما نیز بالاتر می رود.اما حالا روزی را تصور کنید که باید یکی از قدیمی ترین برنامه های یتان را ساپورت کنید.مطمئنم که واقعا خسته کننده و بسیار وقت گیر خواهد بود تا بفهمید هر بخش از کدها چه کاری انجام می دهد.ولی وقتی برنامه های تحت وب تان را بوسیله ی فریم ورک ها بنویسید ،این مشکل کاملا برطرف می شود.زیرا شما مقید به رعایت چاچوب فریم ورک هستید.همین مسئله تضمین می کند که اگر در آینده نیازی به تغییر در کدهای قدیمی تان داشته باشید ،با توجه به چارچوب یکسان ،خیلی سریع به هدف تان خواهید رسید.
2.بالا بردن سرعت توسعه.کلاس های زیادی در zend framework وجود دارند که خیلی از کارهای عمومی و لازم را برای ما انجام می دهند.دیگر نیازی به اختراع چرخ ندارید زیرا یک KAMAZ با چرخ های آماده در اختیار شماست 🙂
3.افزایش امنیت. انسان ممکن الخطا است و هر کسی ممکن است در کدهایش خطا داشته باشد،در این بحثی نیست ولی زند فریم ورک به ما کمک می کند تا حد زیادی میزان خطاها را در پروژه کاهش دهیم.چون واقعا بسیاری از اعمال پراستفاده را بوسیله کلاس های توکارش در اختیار ما قرار می دهد و این به معنی نوشتن کدهای کمتر است و کد کمتر = خطای کمتر.
کلا زند فریم ورک و استفاده از اون سخت است ؟
عده ای عقیده دارند که فهم و درک زند فریم ورک سخت است،همچنین به منابع زیاد سرور نیز احتیاج دارد،البته واقعیت این نیست.اگر شما می توانید php را یاد بگیرید پس می توانید Zend Framework را نیز فرا بگیرید و از آن استفاده کنید ،فقط باید کمی تلاش و همت کنید.
مزایا و معایب Zend Framework
همه راه حل ها آرمانی نیستند و این فریم ورک نیز از این قاعده مستثنی نیست.هم نکات خوب دارد و هم نکات منفی که در این قسمت آنها را بررسی می کنیم.اجازه بدید با معایب شروع کنیم:
1.سنگین بودن ، برای مثال ،نسخه 1.8.a حدود 17 مگابایت است (زیاد نترسید !) با اینکه این خیلی هم زیاد نیست.اگر از این مقدار حجم ترسیده اید ،کافیست به سایز سایر CMS ها نیز نگاهی بیندازید.بسیاری از آنها بیشتر از 10 مگابیت حجم دارند و این حجم زند فریم ورک برای ما سورپرایز نیست ! چون تعداد توابع و کدهای بسیار زیادی دارند.
2.نیاز به زمان زیاد برای یادگیری ، در این مورد یک نسخه واحد وجود ندارد ، برای بعضی ها ممکن است یک سال باشد ولی کاربران دیگر طی چند روز آن را فرا بگیرند و اولین برنامه شان راهم بنویسید.
به اندازه کافی بد زند فریم ورک رو گفتیم دیگه ! ، حالا می رویم سراغ مزایا 🙂 :
1.Zend Framework مجموعه ای از کلاس هاست، که به هم گره خورده اند و شاید در یکی پروژه استفاده نشوند ولی به عنوان لوازم یدکی می توانند در کارهای بعدی مورد استفاده قرار گیرند.کلا هر چیزی که برای پروژه پیش رو نیاز دارید در زند فریم ورک موجود است.
2.وجود کامپوننت هایی برای کار با سرویس های ثانویه (third-party)
3.کاملا بر پایه روش شی گرایی (Object-oriented) می باشد
4.بر پایه شیوه MVC می باشد
5.به خوبی مستندسازی شده است
بنابراین بدون هیچ نظریه پردازی نوینی مستقیما سراغ تمرین و استفاده از این فریم ورک باشکوه می رویم.برای آزمایش کار ZF ما به خود آن نیاز داریم (آخرین نسخه را می توانید از اینجا دانلود کنید) ،بعد به یک عدد HTTP server مثل Apache همراه با پشتیبانی mod_rewrite .همچنین آخرین نسخه php و mysql.حالا ZF رو می تونید به دو صورت دریافت کنید:
- کامل (Full)
- فشرده(minimal)
بسته اول شامل تول کیت Dojo و یک نمونه آماده از استخوان بندی ZF است ،بنابراین اگر قصد شروع یادگیری ZF رو دارید ، پیشنهاد ما این بسته است.
بسته دوم صرفا شامل کتابخانه های فریم ورک است.
حالا باید هسته ZF را از حالت فشرده خارج کنید (/ library / Zend) ، البته بهتر است فایل های آن را در دایرکتوری های بالاتر قرار دهید تا بین پروژه های مختلف مشترک باشد و برای هر پروژه نیازی به هسته جدید نباشد.در این صورا اگر ZF را بروز کنید ،تمام پروژه ها بروز می شوند.مثلا در کامپیوتر خودم آن را در آدرس D: \ library \ ZF \ 1.7.8 \ Zend \
قرار دادم.
ایجاد ساختار پروژه
اگر موافق باشید ،ساختار فایل ها برای پروژه آینده مان را مشخص کنیم.دو پوشه جدید در پوشه اصلی پروژه ایجاد کنید:
application : تمام کدهای پروژه اعم از ماژول ها ،مدل ها ،ویو ها و … در این پوشه خواهند بود.
public : تمام فایل های اشتراکی در این پوشه خواهند بود.
همچنین فایل های index.php و .htaccess را در همین پوشه root ایجاد می کنیم.کدهای زیر را در فایل htaccess قرار دهید:
RewriteEngine on RewriteRule .* index.php
همچنین یک فایل .htaccess با محتوای زیر به پوشه “public” اضافه کنید:
RewriteEngine off
حالا اجازه دهید 3 پوشه دیگر داخل دایرکتوری “application” ایجاد کنیم:configs, library, modules
configs : فایل های پیکربندی پروژه داخل این پوشه خواهند بود
library : فایل و کتابخانه های اضافی داخل این پوشه قرار می گیرند.
modules : و کدهای پروژه داخل این پوشه هستند.
بعد از این دستکاری های کوچک ،ما ساختاری مثل زیر خواهیم داشت :
دایرکتوری ریشه (root) :
- application
- configs
- library
- modules
- public
- .htaccess
- .htaccess
- index.php
حالا که ساختار ایجاد شد ،می توانیم سراغ کد نویسی برویم 😉
فایل (index.php) اصلی را باز کرده و داخل آن 4 ثابت (constatnt) قرار می دهیم .این چهار ثابت عبارتند از :
PATH_TO_ZF : مسیر فریم ورک زند را مشخص می کند.
PATH_TO_APPLICATION : مسیر پوشه “application” را مشخص می کند.
PATH_TO_LIBRARY : مسیر کتابخانه های اضافی ما را تعیین می کند.
PATH_TO_MODULES : مسیر ماژول ها را مشخص می کند.
حالا کد آن :
define('PATH_TO_ZF', '../../../ZF/1.7.7/'); define('PATH_TO_APPLICATION', './application/'); define('PATH_TO_LIBRARY', PATH_TO_APPLICATION . 'library/'); define('PATH_TO_MODULES', PATH_TO_APPLICATION . 'modules/');
حالا مسیر بارگذاری فایل ها را به مفسر می فهمانیم :
include_path(PATH_TO_ZF . PATH_SEPARATOR . PATH_TO_APPLICATION . PATH_SEPARATOR . PATH_TO_LIBRARY);
قدم بعدی دریافت Zend_Loader است که بعدا به آن رجوع خواهیم کرد:
require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload();
حالا که Zend_Loader فعال شد ،می توانیم Zend_Controller_Front(در موردش بعدا توضیح می دهیم) را نیز فراخوانی کنیم و مسیر ماژول ها را به توزیع کننده(dispatcher) زند بدهیم.
$controller = Zend_Controller_Front::getInstance; $controller->addModuleDirectory(PATH_TO_MODULES)->dispatch();
خوب ،تا اینجا نتیجه باید شبیه زیر باشد :
define('PATH_TO_ZF', '../../../ZF/1.7.7/'); define('PATH_TO_APPLICATION', './application/'); define('PATH_TO_LIBRARY', PATH_TO_APPLICATION . 'library/'); define('PATH_TO_MODULES', PATH_TO_APPLICATION . 'modules/'); set_include_path(PATH_TO_ZF . PATH_SEPARATOR . PATH_TO_APPLICATION . PATH_SEPARATOR . PATH_TO_LIBRARY); require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); $controller = Zend_Controller_Front::getInstance(); $controller->addModuleDirectory(PATH_TO_MODULES)->dispatch();
اگر توجه کرده باشید ، Zend_Loader به صورت خودکار و از روی نام آنها ، آدرس Controller را پیدا کرده و آن را لود می کند.مثلا کنترلی با نام Zend_Controller_Front در مسیر Zend/Controller/Front.php قرار دارد .
آشنایی بیشتر با کنترلرها (Controllers) در zend
Zend_Controller_Front در واقع کار ایجاد ساختار و اسکلت برنامه را بر عهده دارد ، بنابراین فقط یکبار در ابتدای اجرای برنامه می تواند شروع بکار کند.وقتی شما متد dispatch را فراخوانی می کنید ، مدیر برنامه داخل یک حلقه می رود و سه رویداد رخ می دهد:
1.Routing – تعیین اینکه چه module ,controller و event هایی می توانند فراخوانی شوند.اگر جزئیات تعیین نشده باشند به این صورت : site.ru/modules/controller/action/var1/value1/var2/value2 .
2.Dispatching – چک کردن module ,controller و event های فراخوانی شده و فراخوانی همه رویدادهای لازم
3.Answering – ایجاد بخش مشاهده (view)
توسعه ماژول
یک پوشه جدید بنام “default” در پوشه modules ایجاد کنید.این اولین ماژول ما خواهد بود.وقتی ما به لینک سایت خود می رویم (مثلا : http://localhost/site.ru ) ،اولین این ماژول اجرا می شود.اسم این ماژول پیش فرض نیز می تواند تغییر کند.این کار با استفاده از متد setDefaultModule که داخل شی Zend_Controller_Front قرار دارد ،امکان پذیر است.نکته همه این است که این متد باید قبل از عمل dispatching فراخوانی و اجرا شود و پارامتری که در واقع نام ماژول پیش فرض است ،به آن پاس داده شود.مثلا :
$controller->setDefaultModule('index');
حالا نوبت آن رسیده است که دو پوشه دیگر داخل پوشه ماژول مان ایجاد کنیم :
- controllers : کنترلر های ماژول ،داخل این پوشه قرار خواهند گرفت
- views : در این پوشه هم همه چیزهایی که مربوط به بخش نمایشی سایت (ارائه محتوا) می شود ،قرار می گیرند
یک کنترلر جدید با نام (IndexController.php) ایجاد کرده و کدهای زیر را داخلش قرار دهید :
class IndexController extends Zend_Controller_Action { public function indexAction() { return; } }
حالا شما باید یک script برای کنترلر ایجاد کنید.برای این کار پوشه های “scripts/index” را در داخل پوشه “views” ایجاد کنید.تقریبا شبیه این :
default
controllers
IndexController.php
views
scripts
index
یک فایل دیگر با نام index.phtml در داخل مسیر views/scripts/index/ ایجاد کنید.حالا سایت را باز کنید ، اگر خطایی نبود یعنی تا اینجا درست آمده اید 🙂 حالا event را اضافه می کنیم :
$this->view->var = ‘ZendFramework’;
حالا شکل کلی کنترلر به این صورت درآمده است :
class IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->var = ‘ZendFramework’; } }
حالا داخل فایل view یا همان phtml ، کد زیر را قرار دهید :
echo $this->var;
ایجاد یه صفحه برای خطای 404
یک کنترلر دیگر با باید برای این خطا ایجاد کنیم و حتما اسمش را حدس زده اید ، ErrorController.php :
class ErrorController extends Zend_Controller_Action { public function errorAction() { return; } }
حالا باید مانند کنترلر قبلی ، یک فایل view هم برایش ایجاد کنیم در مسیر : /default/views/scripts/error/error.phtml
خطای 404
برای تست این هم می توانید آخر آدرس سایت ، یک چیز نامربوط مثل site/qwerty اضافه کنید.
شما تمام کردید !
برای گام اول بد نبود و فکر می کنم مسائل مهمی مطرح شد که لازم بودند.فراموش نکنید که یک شبه نمی توان مهارت بالایی در این زمینه کسب کرد و نیاز به زمان و تجربه دارید.در این مطلب در مورد ایجاد ساختار اولیه فریم ورک زند بحث کردیم ولی اگر هنوز در درک مفهوم MVC مشکل دارید ، می توانید در گوگل آن را جستجو کنید و به راهنمایی های خوبی برسید.
سلام
آموزش بسیار مفیدی بود
به من که خیلی کمک کرد و ذهنیتم را درباره zend بازتر کرد
امکان داشتن ایمیل شما برای مواجه شدن با اشکال و سوال، هست؟
لطفا از این مقاله ها بیشتر بذارین ، اگه منبعی هم میشناسید معرفی کنید ، ممنون .
be nazare man khoob boood man shakhsan chand ta ketab baraye kar ba zend khoondam hamashoon avalesh az nasb ke shoro mishe tori tozih dade ke fahmidane kara va anjameshoon sakht mishe
gozashte azin harfa zend bar paye sadegi va amniate bishtar neveshte shode vali yad girish zaman bare bayad bishtar hemat konim
سلام علی جان
یه سوال داشتم
اگه نخوام طبق ساختار MVC که زند مشخص کرده کد بزنم،(برای کارم اینجوری بهتره ) چه چیزایی رو لازمه بزارم . چون الان به مشکل برخوردم .library رو include کردم . ولی یه سری ارور میده
سلام
خوب بود ولی دو تا غلط املایی داشتی.
یکی سرعت رو نوشته بودی سرت و دیگری تلاش رو نوشته بودی تلاس!!!
سلام
ممنون از ریزبینی تون . اصلاح شدن 🙂
سلام خسته نباشی .وقتی فریم ورک زند را دانلود می کنم پوشه های application و دیگر پوشه ها را خودمان باید اضافه کنیم؟؟؟؟؟؟؟؟؟؟
وقتی که این فریم ورک را دریافت می کنم فقط پوشه های library bin resources را دارد
@nasim67 سلام ممنون.آموزش نصب نسخه جدید زند اینجا :
http://fotolia.ir/?p=4644
وقتی پوشه ها را اضافه کردم با خطاهای زیر مواجه شدم:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
هو،
سلام علیکم،
احسنت،عالی بود.
یا حق ج
سلام
ممنون ، خوشحالم که خوشتون اومده 🙂
موفقیت
خواهش میکنم.
قسمت دومش که اومد ،خبرم کن اگر تونستم مقداریشو ترجمه میکنم.
سلام دوست من
میگن تعارف اومد ، نیومد داره ، همینه ها 🙂 لینک بخش دومش خدمت شما.اگه وقت داشتین می تونید تا جایی که دوست دارید ترجمه اش کنید و از لینک بالا “http://fotolia.ir/2613-2-برای-فتولیا-بنویسید/ ” بفرستید و بنام خودتون ارسال میشه .
http://www.1stwebdesigner.com/tutorials/beginner-guide-zend-framework-2/
متشکرم
هو،
علیک السلام،
علی جون تعارفم خوب گرفت نه؟:D
حکمته دیگه 😉
میذارم تو برنامه هام.
یا حق ج
سلام
بله ، تا شما باشی از این تعارفا نکنی عزیز 🙂
مرسی ، موفق وپیروز باشید
ممنون علی جان
مطلب خوبی بود.ولی فک کنم بهتره اول تو php مهارت لازم رو کسب کنم بعدش سراغ فریم ورک ها بیام.درسته؟
سلام حامد عزیز
درسته ، بدون دونستن php یاد گرفتن اینها کمی سخت میشه .مخصوصا زند که نصبش هم کار شاقیه واقعا !
موفقیت
ممنون، خیلی عالی بود. یک سوال: برای وب سایت های ساده با تعداد صفحات محدود ZF را میشه استفاده کرد؟ منظورم اینه که آیا کد های زیاد باعث کندی سایت نمیشه؟
سلام دوست عزیز
شدنش میشه ولی مثل اینه که برای سربریدن یه جوجه از ساتور استفاده کنید 🙂
موفقیت