آغاز کار با سیمفونی

به نظر بنده بهترین مرجع برای شروع سیمفونی (Symfony) همان پروژه Jobeet است که به شما آموزش می‌دهد که چگونه بوسیله این فریم‌ورک در مدت ۲۴ ساعت (روز) یک برنامه تحت وب کار آمد را بصورت کاملاْ حرفه‌ای تولید کنید. البته اشاره به این نکته هم خالی از لطف نیست که این آموزش ۲۴ قسمتی یکی از مزایای سیمفونی در مقابل رقبای قدرتمند خود همچون Zend و CakePHP است. چرا که تولید برنامه‌ای با این قدرت در همان ابتدای راه، نشان دهنده قدرت و در عین حال سادگی سیمفونی می باشد.

در ادامه به ترجمه بخش اول این کتاب (جدای از مقدمه) می‌پردازیم. (طبق معمول ترجمه‌ای پر از اشکال که به عظمت سیمفونی ببخشید)

امروز چکار می‌کنیم؟

۲۴ ساعت زمان مناسبی برای توسعه یک برنامه توسط سیمفونی است (در سال صرفه جویی و اصلاح الگوی مصرف، واقعا تا این حد صرفه جویی در زمان کار بسیار پسندیده‌ای است). امروز هیچ کدی نمی‌نویسیم. اما بدون نوشتن حتی یک خط کد، می‌توانیم مزایای استفاده از سیمفونی را تنها با راه اندازی یک پروژه جدید درک کنیم.

هدف امروز ما، راه اندازی محیط توسعه و نمایش صفحه‌ای از برنامه در مرورگر است. اینکار شامل نصب سیمفونی، ایجاد برنامه و تنظیمات وب سرور می‌شود.

پیشنیاز‌ها

قبل از هر چیز محیط توسعه رو چک می‌کنیم. یک وب سرور (ترجیحاْ Apache)، یک موتور پایگاه داده (ترجیحاْ MySQL) و PHP نسخه ۵.۲.۴ و یا جدید‌تر!

در سیمفونی به وفور از خط فرمان استفاده می‌کنیم، پس بهتر است تا از سیستم‌های مبتنی بر Unix (ترجیحاْ لینوکس OpenSUSE که دلیلش هم بعداْ می‌گم!!!) استفاده کنید. البته ویندوز هم می‌شه ولی نه با این کیفیت!

در ادامه این مباحث بیشتر توجه ما به روی سیمفونی است و فرض را بر این می‌گذاریم که شما اطلاعات خوبی راجع به PHP 5 و OOP یا همون Object Oriented Programming می‌دانید.

برای آشنایی خیلی سریع با برنامه نویسی شی‌گرا این تاپیک را مطالعه کنید.

نصب سیمفونی

ابتدا برای میزبانی فایل‌های مرتبط با پروژه Jobeet یک پوشه می‌سازیم و بهتر است این‌ کار را توسط خط فرمان انجام دهیم.

$ mkdir -p /home/sfprojects/jobeet
$ cd /home/sfprojects/jobeet

حالا یک پوشه هم برای فایل‌های کتابخانه‌ای سیمفونی می‌سازیم

$ mkdir -p lib/vendor

صفحه نصب در سایت رسمی پروژه تمام نسخه‌های مجاز رو لیست و مقایسه کرده. این آموزش نیز برای ورژن ۱.۲ نوشته شده است. به صفحه نصب این نسخه بروید و در قسمت زیرین Source Download، آرشیوی از فرمت‌های tgz و یا zip رو می‌تونید پیدا کنید. آرشیو را دانلود کرده و در پوشه‌ای که به تازگی ایجاد کردید قرار دهید و سپس آن را از حالت فشرده خارج کنید و البته باز هم سعی کنید اینکار را با استفاده از Terminal انجام دهید!

$ cd lib/vendor
$ tar zxpf symfony-1.2.2.tgz
$ mv symfony-1.2.2 symfony
$ rm symfony-1.2.2.tgz

از آنجایی که پیکر‌بندی PHP بواسطه وجود نسخه‌های مختلف بسیار متفاوت است، ما نیاز به بررسی پیکره‌بندی PHP داریم تا از وجود حداقل‌ها برای سازگاری با سیمفونی آگاه شویم.

اسکریپت configuration checker رو از خط فرمان اجرا می‌کنیم.

$ cd ../..
$ php lib/vendor/symfony/data/bin/check_configuration.php

اگر مشکلی باشد در خروجی به شما تذکر خواهد داد و راه حل رفع ان را نیز به شما می‌گوید. همچنین می‌توان این آزمایش را بدون استفاده از خط فرمان در مرورگر اجرا کرد. فایل اسکریپت رو در شاخه ریشه وب کپی کنید و به آدرس مربوطه بروید و هرگز فراموش نکنید که بعد از پاک کردن فایل رو پاک کنید.

$ rm web/check_configuration.php
1sec1_configuration_check

تصویر شماره ۱-۱ / configuration checker

اگر در خروجی خطایی داده نشد نشان دهنده نصب درست سیمفونی است. شما می‌توانید بوسیله خط فرمان ورژن سیمفونی را مشاهده نمائید.

$ php lib/vendor/symfony/data/bin/symfony -V

اگر شما هم مثل بنده مشتاقی هستید، که بعید می‌دونم!!! اما احتمالاْ مشتاق هستید که در رابطه با ابزار‌هایی که سیمفونی در خط فرمان فراهم کرده اطلاعاتی کسب کنید. کلمه symfony را در خط فرمان تایپ کنید تا لیستی از آپشن‌ها و وظایف رو مشاهده کنید.

$ php lib/vendor/symfony/data/bin/symfony

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

راه‌اندازی پروژه

در سیمفونی، Applicationها اشتراک همان مدل‌های داده هستند که در پروژه‌ها جمع‌آوری می‌شوند. برای Jobeet ما دو Application داریم: یکی Frontend و دیگری Backend.

ایجاد پروژه

فرمان generate:project را از پوشه Jobeet اجرا کنید که در حقیقت وظیفه ساخت پروژه را دارد.

$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet

این دستور وظیفه ایجاد ساختار پیش‌فرض فایل‌ها و پوشه‌ها را به عهده دارد.

پوشه شرح
apps/ میزبانی تمامی Applicationهای پروژه
cache/ فایل‌های Cache شده از فریم‌ورک
config/ فایل‌های پیکره‌بندی پروژه
lib/ کتابخانه‌ها و کلاس‌های پروژه
log/ فایل‌های log فریم‌ورک
plugins/ افزونه‌های نصب شده
test/ دستگاه آزمایش اساسی فایل‌ها
web/ پوشه ریشه وب (در پایین می‌بینیم)

نکته : چرا سیمفونی فایل‌های زیاد تولید می‌کند؟ یکی از مزایای استفاده از یک فریم‌ورک full-stack این است که توسعه شما را استاندارد می‌کند. هر توسعه دهنده ای با دانسته‌هایی اندک از سیمفونی، میتواند از پروژه‌های سیمفونی حمایت کند. تنها با چند دقیقه وقت گذاشتن می‌شه داخل کد‌ها رفت، حفره‌های آنها را گرفت و یا ویژگی‌های جدیدی رو به انها افزود.

وظیفه generate:project ساخت یک میان‌بر در شاخه اصلی پروژه است تا هنگام اجرای وظایف (Task) کمترین تعداد کاراکتر را تایپ کنید.

همچنین از این به بعد، بجای استفاده بجای استفاده از مسیر‌های کامل و صحیح به Applicationهای سیمفونی از میان‌برها استفاده می‌کنیم.

ایجاد Application

حالا نمای جلوی برنامه را بوسیله دستور generate:app ایجاد می‌کنیم.

$ php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend

نکته :به دلیل اجرایی بودن فایل‌های میان‌بر سیمفونی، از این پس کاربران unix می‌توانند بجای تمام رخداد‌های php symfony از ./symfony استفاده کنند.

اساس یک application روی نام است، زیرا یک شناسه است، وظیفه generate:app ایجاد ساختار پیش‌فرض پوشه‌هایی است که برنامه نیاز دارد و تحت پوشه apps/frontend قرار می‌گیرند.

پوشه شرح
config/ فایل‌های پیکره‌بندی application
lib/ کتابخانه‌ها و کلاس‌های application
modules/ کد‌های application (توجه به MVC)
templates/ فایل‌های سراسری قالب

نکته : تمام دستورات سیمفونی باید در پوشه ریشه پروژه اجرا شوند، مگر اینکه بطور صریح طور دیگری اعلام کنند.

علاوه بر اینها به هنگام فراخوانی وظیفه generate:app از دو خصیصه امنیتی مرتبط عبور می‌کنیم.

  • –escaping-strategy : فعال کردن فرار خروجی برای جلوگیری از حملات XSS
  • –csrf-secret : فعال کردن اجازه ورود به نشست‌ها در فرم‌ها برای جلوگیری از حملات SCRF

با اعمال این دو خصیصه اختیاری به وظیفه، می‌توانیم آینده توسعه خودمان را برای بیشتر از ۲ آسیب‌پذیری رایج در وب امن کنیم. درسته! سیمفونی بطور خودکار اقدامات امنیتی را از طرف ما انجام می‌دهد.

یادداشت : اگر در رابطه با XSS و CSRF چیزی نمی‌دانید، وقتی را به یادگیری درباره این دو آسیب‌پذیری امنیتی اختصاص دهید.

مسیر سیمفونی

شما می‌توانید نسخه استفاده شده برای پروژه را با استفاده از دستور زیر بدست آورید.

$ php symfony -V
or
$ symfony -V

این دستور مسیر پوشه نصب سیمفونی را نیز نمایش می‌دهد که می‌توان آن را در آدرس config/ProjectConfiguration.class.php پیدا کرد:

// config/ProjectConfiguration.class.php
require_once '/Users/mehdi/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php';

برای بهبود قابلیت حمل، مسیر مطلق را با یک مسیر نسبی تعویض می‌کنیم.

// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';

حالا شما می‌توانید پروژه را بروی هر سیستمی انتقال دهید و اون به درستی کار کند.

محیط

اگر به پوشه /web نگاه کنید، دو فایل PHP را در آن پیدا می‌کنید: index.php‌ و frontend_dev.php. این فایل‌ها برای فراخوانی front controller هستند: تمام درخواست‌ها به application بواسطه آنها ساخته شده‌اند.

اما چرا دو عدد front controller داریم، در حالی که تنها یک application ساخته‌ایم؟!

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

Development environment : این محیطی است که توسعه دهندگان بهنگام کار بروی برنامه‌ها برای اضافه کردن خصوصیات و رفع حفره‌ها از ان استفاده می‌کنند.

Test environment : این محیط در آزمایش‌های خودکار مورد استفاده قرار می‌گیرد.

Staging environment : این محیز برای استفاده مشتری (کارفرما) برای امتحان و گزارش حفره‌ها و قابلیت‌های فراموش شده است.

Production environment : این محیط هم اخر کار است و برای ارائه نهایی است.

اما چرا تهیه محیط‌های مختلف؟ برای مثال در محیط‌ توسعه برای راحتی در کار اشکال زدایی به log شدن تمام جزئیات درخواست‌ نیاز است. اما سیستم Cache باید غیر فعال باشد تا تمامی تغییرات ایجاد شده در کد اعمال شوند. بنابراین بهینه سازی محیط توسعه برای اینکار ضروری است. بهترین مثال زمانی است که یک مشکل خاص در برنامه رخ می‌دهد. برای کمک به توسعه دهنده سیمفونی این مشکل خاص رو بهمراه تمامی اطلاعاتش در رابطه با درخواست‌ جاری، در مرورگر نمایش می‌دهد.

1sec1_configuration_check

تصویر شماره ۲-۱ / Exception dev

اما در محیط ارائه Cache فعال است و به خوبی کار می‌کند. برنامه نیز پیغام‌های خطا را بجای اتفاق‌های خاص نمایش می‌دهد. بنابراین محیط ارائه برای نمایش و فعالیت کاربران بهینه شده است.

1sec1_configuration_check

تصویر شماره ۳-۱ / Exception prod

محیط‌های سیمفونی دارای تنظیمات جداگانه‌ای هستند. فریم‌ورک سیمفونی بهمراه این سه می‌آید: dev، test و prod. در روز ۲۲ (قسمت ۲۲ آموزش) چگونگی ساخت یک محیط جدید رو فرا می‌گیرید و البته محیطstaging .

اگر فایل front controller را باز کنید، محتویات زیر را مشاهده خواهید کرد که برای تنظیمات محیط است.

// web/index.php
<?php
 
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
 
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();

یادداشت : تعیین یک محیط برای سیمفونی حتی از ایجاد یک front controller هم آسان‌تر است. در آینده می‌بینیم که چطور می‌توان تنظیمات یک محیط را تغییر داد.

راه‌اندازی وب سرور : شیوه اشتباه

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

درسته! چون پیکره‌بندی وجود ندارد راه‌اندازی خیلی سریع انجام شد. اما تلاش برای دسترسی به فایل config/databases.yml در مرورگر شما برای درک نتایج بد این تنبلی.اگر کاربران بدونند که وبسایت شما با سیمفونی توسعه پیدا کرده، می‌توانند به بسیاری از فایل‌های مهم دسترسی پیدا کنند.

هرگز اینکار را در سرور انجام ندهید و بخش بعدی رو برای یادگیری چگونگی راه‌اندازی وب سرور مطالعه کنید.

راه‌اندازی وب سرور : شیوه مطمئن

بهترین‌ کار این است که تنها فایل‌هایی که باید توسط مرورگر دسترسی داشته باشند همچون فایل‌های سبک‌نامه، جاوا و تصاویر را در پوشه اصلی قرار داده که البته بهتر است بطور پیشفرض در پوشه /web قرار دهیم.

اگر نگاهی به این پوشه انداخته باشید زیر پوشه‌هایی رو می‌بینید که دارایی آنها، فایل‌ها (سبک‌نامه، تصاویر و …) و دو فایل front controller هستند.front controllerها تنها فایل‌های PHP هستند که نیاز دارند تا در پوشه ریشه وب سرور قرار بگیرند. همه فایل‌های دیگر PHP می‌توانند از دید مرورگر مخفی شوند. که این ایده خوبی از لحاظ امنیتی است.

پیکره‌بندی وب سرور

حالا زمان ان رسیده تا پیکره‌بندی Apache را تغییر دهیم.

فایل پیکره‌بندی httpd.conf را باز کرده و این کد‌ها را در خط اخر ان اضافه کنید.

# Be sure to only have this line once in your configuration
NameVirtualHost 127.0.0.1:8080
 
# This is the configuration for Jobeet
Listen 127.0.0.1:8080
 
<VirtualHost 127.0.0.1:8080>
DocumentRoot "/home/sfprojects/jobeet/web"
DirectoryIndex index.php
<Directory "/home/sfprojects/jobeet/web">
AllowOverride All
Allow from All
</Directory>
 
Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf
<Directory "/home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>

این پیکره‌بندی، Jobeet را در آدرس http://localhost:8080/ قابل دسترس می‌کند

شما می‌توانید این عدد را با هر عدد دیگری تغییر دهید. اما بهتر است از اعداد بزرگتر از ۱۰۲۴ استفاده کنید. زیرا این اعداد نیازی به اجازه مدیر سیستم ندارند.

آزمایش پیکره‌بندی جدید

Apache را دوباره راه‌اندازی کنید (restart). دسترسی به jobeet را با استفاده از آدرس بالا امتحان کنید.

1sec1_configuration_check

تصویر شماره ۴-۱ / Congratulations

یادداشت : اگر ماژول mod-rewrite شما در apache فعال باشد می‌توانید عبارت index.php را از انتهای آدرس حذف کنید. اینکار به برکت قوائد دوباره نویسی پیکره‌بندی شده در فایل /web/.htaccess امکان پذیر است.

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

http://jobeet.localhost/frontend_dev.php/

نوار ابزار عیب‌یابی را باید در گوشه بالا سمت راست مشاهده کنید که شامل آیکون کوچک SF که نام اختصاری سیمفونی است می‌باشد.

1sec1_configuration_check

تصویر شماره ۵-۱ / Web debug toolbar

نوار ابزار فوق در تمام صفحات در محیط توسعه حاضر است و دسترسی به اطلاعات زیادی را بوسیله کلیک بروی سایر تب‌ها به شما می‌دهد. اطلاعاتی همچون پیکر بندی فعلی برنامه، وقایع درخواست جاری، دستورات SQL اجرا شده در موتور پایگاه داده، اطلاعات حافظه و اطلاعات زمان.

Subversion

بهترین کار این است که هنگام توسعه یک برنامه از SVN استفاده کنیم.

برخی از مزایای استفاده از SVN :

با اطمینان کار کردن

  • برگشت به نسخه قبلی در صورت شکست تغییرات ایجاد شده
  • امکان کار کردن موثر و واقعی بیشتر از چند نفر بر روی یک پروژه
  • دسترسی به تمامی نسخه‌های منتشر شده پی در پی

در این بخش به شرح چگونگی کار کردن با SVN بوسیله سیمفونی می‌پردازیم. اگر شما از هر ابزار کنترل کد دیگری استفاده می‌کنید، توضیح در مورد چگونگی SVN بسیار راحت خواهد شد.

تصور را بر این می‌گذاریم که شما به یک سرور subversion دسترسی دارید و می‌توانید بوسیله http با اون کار کنید.

نکته : اگر سرور subversion در دسترس ندارید، می‌توانید به رایگان در google code یک مخزن ایجاد کنید و یا عبارت free subversion را در google جستجو کنید و …

ابتدا مخزن پروژه Jobeet را ایجاد می‌کنیم.

$ svnadmin create /path/to/jobeet/repository

ساختار اصلی پوشه‌ها را در سیستم ایجاد می‌کنیم.

$ svn mkdir -m "created default directory structure" http://svn.example.com/jobeet/trunk http://svn.example.com/jobeet/tags http://svn.example.com/jobeet/branches

و پوشه خالی trunk را بررسی می‌کنیم.

$ cd /home/sfprojects/jobeet
$ svn co http://svn.example.com/jobeet/trunk/ .

سپس محتویات پوشه /cache و /log را پاک می‌کنیم، زیرا نیازی به درج انها در مخزن نداریم.

$ rm -rf cache/* log/*

حالا از دسترسی‌های پوشه‌های /cache و /log اطمینان حاصل می‌کنیم تا سرویس دهنده وب بتواند در آنها بنویسد.

$ chmod 777 cache/ log/

حالا تمامی فایل‌ها و پوشه‌ها را وارد می‌کنیم.

$ svn add *

از آنجایی که نیازی به فایل‌های موجود در پوشه‌های /cache و /log نداریم باید آنها را در ignore list قرار دهیم.

$ svn propedit svn:ignore cache

ویرایش‌گر متن پیشفرض برای SVN باید راه افتاده باشد. Subversion باید تمامی محتوای موجود در این پوشه را ignore کند.

*

ذخیره کنید و خارج شوید. شما موفق شدید.

این مراحل را برای پوشه log تکرار کنید.

$ svn propedit svn:ignore log

و وارد کنید:

*

در نهایت، این تغییرات رو در مخزن اعمال کنید

$ svn import -m "made the initial import" . http://svn.example.com/jobeet/trunk

فردا (بخش دوم) همدیگر را خواهیم دید

وقت امروز تمام شد. با این حال حتی اگر صحبت کردن در رابطه با سیمفونی را آغاز نکردیم، اما یک محیط توسعه پایدار داریم، در رابطه با بهترین شیوه‌های توسعه وب بحث کردیم و هم اکنون برای کد نویسی آماده شده‌ایم.

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

یادداشت : اگر می‌خواهید کد امروز و یا هر روز دیگری را بررسی کنید، کدها بصورت روز به روز در مخازن رسمی Jobeet یافت می‌شوند.(http://svn.jobeet.org/propel)

برای مثال شما می‌توانید با استفاده از تگ release_day_01 کد‌های امروز را دریافت کنید.

$ svn co http://svn.jobeet.org/propel/tags/release_day_01/ jobeet/
(13) دیدگاه || دیدگاه شما چیست؟

فرید در تاریخ 8 آوریل , 2009 @ 8:01 ب.ظ

به به الان داشتم به خودم میگفتم بابا این مهدی خان که گفت به زودی پس چی شد!!!
خیلی خوشحالماین اموزشو میبینم.
البته هنوز نخوندمش ولی امیدوارم ادامه پیدا کنه
موفق باشی

مهدی در تاریخ 8 آوریل , 2009 @ 8:46 ب.ظ

ممنونم. راستش jobeet پروژه برنامه نویسی بنده هم هست و تصمیم دارم تا جای ممکن برای اماده کردن داکیومنتشن ترجمش کنم.
دارم سعی می‌کنم که علاوه بر ترجمه یه چیزایی هم از خودم بنویسم. البته باید یکم راه بیفتم که چیزی واسه گفتن باشه. فعلاْ که …

محمد صالح در تاریخ 10 آوریل , 2009 @ 5:21 ق.ظ

سلام
اول تشکر بابت ترجمه روان و عالی تون
دوم فرض کنید رو لینوکس پروژه رو استارت نمی کنید و رو ویندوز کار میکنید؟ آنوقت چطور هست؟
سوم این روز کنسول هست؟ بدون استفاده ار کنسول چه طور باید استفاده کرد

مهدی در تاریخ 10 آوریل , 2009 @ 12:11 ب.ظ

@محمد‌صالح – ازتون ممنونم! خداوند این دیکشنری رو از من نگیره!!! در رابطه با سوالتون هم شما می‌تونید با مراجعه به این آدرس دستورات شل لینوکس رو بروی محیط ویندوز قابل دسترس کنید.
توی آموزش اصلی در سایت سیمفونی نیز به همین نکته اشاره شده و لابلای مطالب نکته‌هایی رو برای کاربران ویندوز بیان کرده که از قسمت آینده اونها رو هم ترجمه می‌کنم.

سید علی ساعدی در تاریخ 12 آوریل , 2009 @ 9:09 ب.ظ

دوست عزیز سلام

ازتون دعوت میکنیم به گروه PHP در ایران بپیوندید تا مرجع کاملی تشکیل بشه برای رشد کیفی و کمی PHP در ایران.

http://www.phpgroup.ir

زهرا در تاریخ 12 آوریل , 2009 @ 9:43 ب.ظ

مرسی از معرفی سیمفونی و چقدر قالب این وبلاگ زیباست!

چالیست در تاریخ 13 آوریل , 2009 @ 8:06 ب.ظ

خیلی خوب بود
سپاسگذارم
لطفاً بگین که ما ویندوزی ها هم چطور می تونیم ازش استفاده کنیم.
خیلی ممنون
راستی قالب در بخش تیتر ها هم مشکل داره مثلا اونجا که نوشتین “پیشنیازها”
خیلی ممنون

مهدی در تاریخ 13 آوریل , 2009 @ 10:46 ب.ظ

@چالیست – سلام و ممنون. در مورد مشکل کاربران ویندوز، همونطور که در جواب آقا محمد‌صالح گفتم با استفاده از این می‌تونید مشکل رو حل کنید. البته حتماْ در قسمت‌های بعدی نکاتی را که برای کاربران ویندوز ذکر شده را ترجمه خواهم کرد.
اما فراموش نکنید که بهترین پلتفرم برای توسعه وب بوسیله PHP همان لینوکس است!!! ;)

در مورد قالب هم، مشکلاتی داره که دارم کم کم برطرف می‌کنم اما توی تیتر‌ها مشکلی ندیدم! شاید در IE که البته شما با FF3 کار می‌کنید! در هر صورت ممنون.

چالیست در تاریخ 14 آوریل , 2009 @ 2:56 ب.ظ

سپاس بزرگوار
مشکل قالب هم که عرض کردم منظورم رنگ بندی نامناسب بود. این پیوند رو ببینید:
http://dc148.4shared.com/img/98477258/b914d99f/sss.gif?sizeM=3
خیلی تیتر ها واضح نیست

Moshtaghi.ir » Blog Archive » آموزش سیمفونی ( Jobeet - قسمت دوم) در تاریخ 22 آوریل , 2009 @ 10:58 ب.ظ

[...] می‌کنم قبل از مطالعه این مطلب حتماْ قسمت اول را مطالعه [...]

Moshtaghi.ir » Blog Archive » آموزش سیمفونی ( Jobeet - قسمت سوم) در تاریخ 29 آوریل , 2009 @ 11:51 ب.ظ

[...] سیمفونی ( Jobeet – قسمت سوم) 29 آوریل 09 php jobeet, Schema, Symfony بخش اول و دوم را خوانده‌اید؟ اگر نه که سعی کنید حتماْ آنها را [...]

نويد در تاریخ 6 می , 2009 @ 1:16 ب.ظ

ممنون از مطالب خوبت،
در مورد كاربراني كه مي خواهند در ويندوز كد php بزنند، ميتونند xampp يا wamp را نصب كنند و از Zend Studio 6 به عنوان IDE استفاده كنند.

عليرضا در تاریخ 3 می , 2010 @ 8:47 ق.ظ

اقا من index.php از web لود میکنم ولی images , css و چیزهای دیگه لود نمیشه!
sf/ راداخل web پیدا نمیکنه !

دیدگاه خود را بگوئید

D:

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

این صفحه توسط 34 پرس و جو در عرض 2909 ثانیه ایجاد شده است و از نظر زبان فارسی کاملاً معتبر می‌باشد.