آموزش سیمفونی دو شروع کار
s: آموزش | سیمفونی تذکر : از ابتدای سال 92 برای آموزش سیمفونی، سایتی جداگانه به این آدرس را در نظر گرفته ام که امیدوارم تا ابتدای تابستان 92 آماده شود . قسمت اول : نصب و پيکربندي سيمفوني دو - مروري بر اولين برنامه دیباچه : برای شروع کار با یک چهارچوب برنامه نویسی پی اچ پی ابتدا باید با مفهوم چهارچوب برنامه نویسی (framework) آشنا باشید و ضرورت استفاده از آنرا درک کرده باشید. به طور خلاصه چهارچوب های برنامه نویسی برای تسهیل برنامه نویسی حرفه ای طراحی شده اند و نیازهای اصلی و مشترک کاربران در برنامه نویسی در آنها به طور کامل دیده شده است . فرض کنید بخواهید سایتی را طراحی کنید و تصمیم گرفته اید که کارتان را با پی اچ پی انجام دهید. اگر بخواهید یک برنامه کامل بنویسید باید مسائل زیادی را علاوه بر کد اصلی برنامه در نظر بگیرید . مثلاً اینکه کاربر بتواند قالب سایت را به دلخواه خودش عوض کند بدون اینکه نیاز به شما داشته باشد. سطوح مختلف دسترسی به برنامه به بهترین نحو رعایت شود. برای پایگاه داده از روشهای سنتی فاصلی گرفته و از مدلهای شی گرا و برنامه ای سه لایه استفاده کنید و خیلی از مسائل دیگر که پرداختن به تک تک آنها بسیاری از وقت شما را خواهد گرفت و در صورت تولید هم باید تست و اشکالزدایی شود. چهارچوب های برنامه نویسی مانند دات نت به طور کلی برای پاسخگویی به این نیاز ساخته شده اند یعنی آماده کردن کدها و کتابخانه هایی که تولید برنامه ها را در حداقل زمان و با بهترین کیفیت و بیشترین امکانات انجام دهد. حال باید از بین چهارچوب های برنامه نویسی پی اچ پی یکی را انتخاب کنید . قبلاً راجع به این موضوع مطلبی را نوشته ام که در آن کدایگنایتر را پیشنهاد کرده ام اما با افزایش جستجو ها به این نتیجه رسیدم که یکی از بهترین چهارچوب های پی اچ پی امروز دنیا سیمفونی دو است که به زعم خود شرکت توسعه دهنده آن نسبت به نسخه یک تغییرات بسیار زیادی بخصوص در بحث سرعت و کارآیی برنامه ها داشته است. فرض ما در آموزشهایی که از این به بعد خواهد آمد که شما با خود پی اچ پی آشنایی اولیه دارید و مفاهیم بانک اطلاعاتی و نحوه اتصال و کار با آنها را می دانید. آخرین مفهومی که قبل از شروع ادامه بحث باید راجع به آن هم آشنایی داشته باشید و بعد شروع به یادگیری سیمفونی دو نمائید آشنایی با مفاهیم برنامه نویسی سه لایه است که پایه و اساس آنرا هم برنامه نویسی شی گرا تشکیل می دهد. در این نوع برنامه نویسی هر برنامه از سه قسمت تشکیل شده است : داده ها - الگوریتم ها و بخش ورودی خروجی . بخش ورودی داده ها را می گیرد,قسمت الگوریتم که وظیفه اصلی و مدیریت برنامه را برعهده دارد داده های ورودی را تحلیل می کند و در صورت نیاز با مراجعه به داده های ذخیره شده نتیجه را تولید و به خروجی می فرستد . در این مدل به قسمت ورودی و خروجی view , به قسمت مدیریت و منطق controller و به قسمت مدیریت داده ها model گفته می شود و به طور خلاصه به برنامه نویسی MVC معروف شده است. پایه و اساس هر کدام از این سه قسمت را هم کلاس ها تشکیل می دهند. یعنی هر سه تای MVC هر کدام از یک کلاس تشکیل شده اند که این کلاس هم مجموعه ای از توابع(متد) و متغیر(فیلد)هاست. کلاس های مدیریت داده هم کاملاً وابسته به مفاهیم ORM هستند که رابط بین دنیای شی گرایی و جداول رابطه ای بانکهای اطلاعاتی هستند . برای نصب پی اچ پی و مای اس کیو ال و وب سرور آپاچی کافیست یکی از نرم افزارهای Wampp,Xampp یا EasyPHP را نصب کنید و سرویس دیتابیس و آپاچی آنها را فعال کنید و پس از دانلود سیمفونی دو که توصیه ما دانلود Sandbox که یک برنامه ساده به همراه تمام فایلهای سیمفونی دو است را دانلود کرده و در پوشه اصلی سایت (معمولاًwwwRoot یا htdocs ) کپی کرده و به ادامه این آموزش بپردازید. آموزشهای جامع و خوبی راجع به سیمفونی یک می توانید در این آدرس بیابید. دانلود براي اينکه يک پروژه کوچک براي شروع داشته باشيد توصيه ما اينست که sandbox را دانلود کنيد و در پوشه اصلي وب سرورتان ( web Root )کپي کنيد. بايد در پوشه sandbox چنين ساختاري را مشاهده نمائيد : app/ cache/ config/ logs/ src/ Application/ HelloBundle/ Controller/ Resources/ vendor/ symfony/ web/ بررسي صحت نصب براي اينکه به راحتي متوجه شويد همه چيز به خوبي کار مي کند اين آدرس را در نوارآدرس مرورگرتان وارد کنيد: http://localhost/sandbox/web/check.php خروجي را به دقت بررسي کرده و در صورت يافتن خطا آنرا رفع کنيد.پس از اين کار اولين برنامه سيمفوني خودتان را با اين آدرس اجرا کنيد: http://localhost/sandbox/web/app_dev.php/ بايد پيام خوشامدگويي سيمفوني را در اين مرحله مشاهده نمائيد. نکته : اگر مجوزهاي دسترسي در پوشه app و زيرپوشه هاي آن به درستي تنظيم نشده باشد ممکن است پيغامي مبني بر نداشتن مجوز و عدم اجراي برنامه مشاهده کنيد . ايجاد اولين برنامه سندباکس به طور پيش حاوي برنامه Hello Application است که با گرفتن نام شخص به او خوشامدگويي مي کند و ما از همين برنامه براي آموزش سيمفوني 2 بهره خواهيم برد. براي شروع به خروجي آدرس زير دقت کنيد که پيام خوشامدگويي به Mojtaba نمايش داده خواهد شد : http://localhost/sandbox/web/app_dev.php/hello/Mojtaba اما پشت صحنه چه اتفاقي افتاده است . بياييد نگاهي دقيق تر به آدرس فوق بيندازيم : app_dev.php اين فايل کنترلر اصلي برنامه است(در مدل سه لايه MVC ) که نقطه شروع برنامه است و پاسخگوي تمام درخواستهاي کاربران است. /hello/Mojtaba اين قسمت درخواست کاربر است که در حقيقت يک آدرس مجازي به فايل مورد نياز کاربر به همراه داده هاي ورودي آن است . تمام وظيفه شما به عنوان برنامه نويس اين است که اين درخواست کاربر را به خروجي مورد نظر تبديل کنيد ! بيائيد نگاهي دقيق تر به اين فرآيند بيندازيم : پيکربندي اما سيمفوني چگونه متوجه مي شود که چه فايلي را بايد اجرا کند؟ به سادگي و به کمک فايلهاي پيکربندي. تمام فايلهاي پيکربندي سيمفوني مي توانند به زبان XML,PHP يا Yaml (يک فايل متني با ساختار خاص که به تدريج با آن آشنا خواهيد شد) نوشته شوند . نکته : پيش فرض سيمفوني برروي Yaml تنظيم شده است که با تغيير در فايل app/AppKernel.php مي توانيد اين مقدارپيش فرض را به ساير قالب ها تغيير دهيد. مسيريابي سيمفوني به کمک فايل زير مسيريابي خود رابراي پاسخگويي به درخواست کاربر شروع مي کند : # app/config/routing.yml // مسير فايل homepage: pattern: / defaults: { _controller: FrameworkBundle:Default:index } hello: resource: HelloBundle/Resources/config/routing.yml homepage زماني که کاربر فقط آدرس سايت را وارد مي کند مورد بررسي قرار مي گيرد. خط اول آن الگوي استفاده شده توسط کاربر را که همان / يا ريشه سايت است را نشان مي دهد. يعني زماني که کاربر اين آدرس را وارد مي کند : http://localhost/sandbox/web/ خط دوم از اين بخش براي يافتن کلاس و تابع متناظر براي اجراي درخواست کاربر استفاده مي شود . اين آدرس از سه قسمت تشکيل شده که با : از يکديگرجداشده اند. قسمت اول نام بسته ايست (باندل يا بسته واحد کد نويسي سيمفوني است و هر پروژه سيمفوني از چندين بسته يا مؤلفه تشکيل شده است که هر يک شامل کلاسها و فايلهاي مرتبط با يکديگر است) که کنترلر مورد درخواست درون آن قرار دارد( FrameworkBundle ) . اين بسته در اين آدرس قرار دارد: sanbox/src/vendor/symfony/src/symfony/bundle/frameworkBundle قسمت دوم نام کنترلريست که بايد فراخواني شود ( default ) . براي يافتن آن درون پوشه بسته فوق ؛ دنبال پوشه اي به نام Controller بگرديد و درون آن فايل DefaultController.php را بايد مشاهده کنيد. نام تابعي که بايد از اين کنترلر صدا زده شود ( index ) پارامتر سوم است که بعد از : قرار گرفته است يعني تابع indexAction که اين تابع پيام خوشامدگويي را به شما نمايش مي دهد. نحوه کارکرد اين تابع را کمي بعد توضيح مي دهيم. بخش دوم اين فايل که با hello نام گذاري شده است براي پردازش درخواستهايي از کاربر که با کلمه hello شروع شوند مانند اولين مثال اجرايي ما به کار مي رود اما برخلاف بخش اول در اينجا فقط آدرس يک فايل Yaml قرار گرفته است. يعني براي يافتن آدرس کنترلري که به درخواست hello جواب دهد بايد به آن آدرس رجوع کنيم . اگر اين فايل را باز کنيم درون آن اين کدها را خواهيم ديد : # src/Application/HelloBundle/Resources/config/routing.yml hello: pattern: /hello/{name} defaults: { _controller: HelloBundle:Hello:index } تفسير اين فايل يمل نيزمانند قبليست يعني اگر کاربر اينچنين الگويي بعد از آدرس سايت وارد کرد /hello/{name} --> متن درون آکولاد پارامتريست که کاربر وارد مي کند بايدتابع indexAction ازکنترلر HelloController که درون بسته HelloBundle قرار گرفته است فراخواني و اجرا شود . بررسي کنترلرها کنترلر وظيفه اصلي پاسخگويي به درخواستهاي کاربر و ارسال پاسخ مناسب که معمولايک فايل اچ تي ام است رابر عهده دارد.شالوده اصلي اين کنترلر يک کلاس پي اچ پي است که ساختار زير را دارد : // src/Application/HelloBundle/Controller/HelloController.php namespace Application\HelloBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class HelloController extends Controller { public function indexAction($name) { return $this->render('HelloBundle:Hello:index.twig.html', array('name' => $name)); // render a PHP template instead } } کد فوق که نتيجه اش چاپ پيام خوشامدگويي است را با هم بررسي مي کنيم : خط اول که جزء امکانات جديد php 5.3 است و فضاي نام اين کنترلر را مشخص مي کند. فضاي نام براي گروه بندي کلاسها و فايلها استفاده مي شود. مي توانيم خط اول را اينگونه تفسير کنيم که کلاس جاري ( HelloController ) جزء زيرمجموعه controller که خود زيرمجموعه hellobundle و نهايتاً زير مجموعه application است. (ساختار درختي) خط دوم هم آدرس فايل Controller.php را براي استفاده درخط سوم و ارث بري از آن مشخص مي کند. خط سوم نام کلاس را مشخص مي کند و اينکه از چه کلاسي ارث بري دارد. تمام کنترلرها فرزند کلاس controller هستند. نکته مهم در اين خط نحوه نام گذاري کلاس است. نام اين کلاس ترکيب پارامتر دوم فايل مسيريابي يعني Hello و کلمه Controller است . اين قانون در نامگذاري ساير کلاسها هم اعمال مي شود. خط چهارم هم تعريف تابعي است به نام indexAction که اين نام هم اگر دقت کرده باشيد ترکيب کلمه Action و پارامتر سوم فايل مسيريابي برنامه است. يعني در فايل مسيريابي تنها ابتداي نام کنترلر و ابتداي نام تابع مورد نظر آورده مي شود. کنترلر اصلي و تابع متناظر با افزودن کلمات فوق فراخواني و اجرا مي شود. خط پنجم که تنها خط کد اين برنامه است تابع render را براي پردازش و ساخت خروجي صفحه مورد نظر فراخواني مي کند. پارامتر اول اين تابع مسير فايل خروجي است که بايد به کاربر نمايش داده شود. اين مسير هم مانند مسير کنترلر از سه قسمت تشکيل شده است . قسمت اول نام باندل يا بسته متناظر است . قسمت دوم نام کنترلرمتناظرو قسمت سوم هم نام فايليست که بايد براي توليد خروجي مورد نظر بايد پردازش شود. پارامتر دوم اين تابع هم ناميست که قرار است خوشامدگويي به او صورت گيرد و به عنوان پارامتر به فايل توليد خروجي ارسال مي گردد. قالب ها به طور پيش فرض سيمفوني از Twig (يکي از موتورهاي پردازش قالب براي پي اچ پي) به عنوان موتور پردازش قالب و توليد خروجي خود استفاده مي کند. فايلي که با استاندارد توئيگ خروجي خوشامدگويي را توليد مي کند از اين قرار است که توضيح آنرا در فصلهاي آتي خواهيد ديد : {# src/Application/HelloBundle/Resources/views/Hello/index.twig.html #} {% extends "HelloBundle::layout.twig.html" %} {% block content %} Hello {{ name }}! {% endblock %} عرض تبريک ! اولين برنامه سيمفوني خود را نوشته و اندک آشنايي با ساختار اوليه آن پيدا کرده ايد. نگاهي دقيقتر به خروجي حال که تا حدودي با ساختار سيمفوني آشنا شده ايد وقت آن است که نگاهي دقيق تر به اولين خروجي توليد شده بيندازيم . اگر دقت کرده باشيد در پائين صفحه يک نوار ابزار با لوگوي پي اچ پي و سيمفوني مشاهده مي کنيد که به آن نوار ابزار اشکالزدايي گفته مي شود و يکي از بهترين ابزارهاي کمکي برنامه نويسي شما خواهد بود.مطمئناً اين نوار هنگام تحويل سايت به مشتري نبايد نشان داده شود که براي اين منظور از يک کنترلر ديگر که آنهم با نام app.php در همان پوشه web قرار گرفته است استفاده مي کنيم يعني اين آدرس را خواهيم داشت : http://localhost/sandbox/web/app.php/hello/Mojtaba و اگر حالت mod_rewrite را در آپاچي فعال کرده باشيد شما مي توانيد نام اين کنترلر را هم در خروجي ذکر نکنيد : http://localhost/sandbox/web/hello/Mojtaba و صد البته هنگام تحويل نهايي سايت بايد ريشه سايت را همان پوشه web قرار دهيد با اينکار آدرس نهايي اينگونه خواهد شد: http://localhost/hello/Mojtaba نکته : براي افزايش سرعت سايت سيمفوني از مکانيزم ذخيره سازي صفحات توليد شده (کش کردن خروجي) استفاده مي کند و هر صفحه اي که يکبار پردازش و به کاربر نمايش داده شود در پوشه app/cache قرار مي گيرد و با درخواست بعدي همان صفحه به جاي پردازش مجدد از همين نسخه قبلاً توليد شده استفاده مي گردد. به همين خاطر اگر از نسخه نهايي کنترلر اصلي استفاده کنيد يکسره بايد فايلهاي اين پوشه را به طور دستي پاک کنيد تا تغييرات جديد خود را ببينيد بنابراين توصيه مي کنيم هنگام برنامه نويسي از همان کنترلر پيش فرض استفاده کنيد.