تالار گفتمان nCIS.ir

نسخه‌ی کامل: آموزش فریمورک Phalcon
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
فالکُن چیه؟
درحقیقت Phalcon یه فریمورک کامل (Full Stack) برای PHP هست که بصورت متن‌باز (Open Source) و با زبان C بصورت یه افزونه نوشته شده که برای کارآیی بسیار بالا، بهینه‌سازی شده. برای استفاده از این فریمورک لازم نیست زبان C رو یاد بگیرین چون استفاده از اون درقالب کلاس‌های PHP که برای شما آماده شدن انجام میشه. اجزاء فریمورک فالکن خیلی کم به هم وابسته هستن و درنتیجه به شما این اجازه رو میده که از اشیاء اون بعنوان نقطه‌ی اتصال بخش‌های مختلف برنامه‌تون استفاده کنین. حتی این امکان وجود داره که از فالکن درکنار سایر فریمورکهای PHP هم استفاده کنین چون بصورت یه افزونه روی PHP نصب میشه که البته این موضوع، استفاده از اون رو توی هاست‌های اشتراکی، کمی با مشکل مواجه میکنه چون توی اغلب هاست‌ها نصب نیست و پشتیبانی هاستینگ هم به‌سختی متقاعد میشه که نصبش کنه (هرچند این موضوع روز به روز داره کمرنگ‌تر میشه و فالکن روی هاست‌های بیشتری نصب خواهد شد).

هدف Phalcon فقط کارآیی (Performance) نیست؛ بلکه قابلیت‌های فوق‌العاده عالی و زیاد و سهولت استفاده از اون هست که باعث شده به یکی‌از فریمورک‌های محبوب تبدیل بشه.

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

فهرست مطالب
نصب Phalcon
چون فالکن بصورت افزونه‌ی PHP هست، نصبش یه‌مقدار با بقیه‌ی کتابخانه‌ها و فریمورکهای مبتنی بر PHP که احتمالاً تا الان کار کردین فرق میکنه. هم میتونین بسته‌ی فالکن رو بصورت Binary (فایل اجرایی سیستم مخصوص سیستم‌عامل خودتون) دانلود کنین و هم اون رو از روی سورسش کامپایل کنین.

نصب در Windows
برای نصب فالکن در ویندوز، کافیه که فایل DLL مناسب رو دانلود کنین و توی php.ini افزونه‌ی جدید رو فعال کنین:
extension=php_phalcon.dll

و بعد هم وب‌سرور خودتون رو (مثلاً Apache) مجدداً راه‌اندازی کنین. برای مثال، روش نصب روی XAMPP شامل مراحل زیر هست:

ابتدا باید نسخه‌ی PHP خودتون رو تشخیص بدین. برای این‌کار کافیه طبق تصویر زیر عمل کنید:
[attachment=542]

بعد از این کار باید نسخه‌ی DLL مناسب رو دانلود کنید:
[attachment=543]

مرحله‌ی بعدی، کپی‌کردن فایل php_phalcon.dll به مسیر ext هست:
[attachment=544]

بعد باید توی php.ini افزونه‌ی جدید رو معرفی کنید:
[attachment=545]

حالا باید Apache رو مجدداً راه‌اندازی کنین:
[attachment=546]

و درنهایت چک کنید که نصب با موفقیت انجام شده یا نه:
[attachment=547]

برای نصب روی WAMP طبق این راهنما عمل کنید.

نصب روی Linux/Solaris

Debian / Ubuntu
برای اضافه‌کردن مخزن مربوطه به توزیع خودتون، یکی از دستورات زیر رو اجرا کنین:
کد:
# Stable releases
curl -s https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh | sudo bash
# Nightly releases
curl -s https://packagecloud.io/install/repositories/phalcon/nightly/script.deb.sh | sudo bash

اینکار فقط یکبار لازمه انجام بشه مگه اینکه توزیع شما تغییر کنه یا بخواین بین نسخه‌های Stable و Nightly (درحال توسعه) جابجا بشین.

بعد از این کار، باید برای نصب فالکن یکی از دستورات زیر رو برحسب نسخه‌ی PHP خودتون انجام بدین:
sudo apt-get install php5-phalcon
# or for PHP 7
sudo apt-get install php7.0-phalcon

توزیع‌های RPM (مثل CentOS)
برای اضافه‌کردن مخزن به توزیع:
کد:
# Stable releases
curl -s https://packagecloud.io/install/repositories/phalcon/stable/script.rpm.sh | sudo bash
# Nightly releases
curl -s https://packagecloud.io/install/repositories/phalcon/nightly/script.rpm.sh | sudo bash

و بعد هم برای نصب فالکن:
sudo yum install php56u-phalcon
# or for PHP 7
sudo yum install php70u-phalcon

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

نصب روی Mac OS X
برای نصب روی Mac OS X میتونین کد رو کامپایل کنین و افزونه رو ازطریق سورس‌کد نصب کنید.

پیشنیازها
باید منابع توسعه‌ی PHP نسخه 5.5 به بالا و Xcode رو داشته باشین.
# brew
brew tap homebrew/homebrew-php
brew install php55-phalcon
brew install php56-phalcon
# MacPorts
sudo port install php55-phalcon
sudo port install php56-phalcon

بعد از این کار، افزونه رو به تنظیمات PHP خودتون اضافه کنین و وب‌سرور رو مجدداً راه‌اندازی کنید.

نصب روی FreeBSD
یه نسخه برای FreeBSD هم وجود داره. فقط کافیه این خط رو اجرا کنین تا نصب بشه:
pkg_add -r phalcon

یا بطور دستی نصب کنید:
export CFLAGS="-O2 --fvisibility=hidden"
cd /usr/ports/www/phalcon
make install clean

چک‌کردن صحت نصب
خروجی phpinfo رو چک کنین تا ببینین قسمتی برای Phalcon اضافه شده یا نه یا اینکه کد زیر رو اجرا کنید:
<?php print_r(get_loaded_extensions()); ?>

اگه نصب رو درست انجام داده باشین، افزونه‌ی Phalcon باید بعنوان بخشی از نتیجه ظاهر بشه:
Array
(
   [0] => Core
   [1] => libxml
   [2] => filter
   [3] => SPL
   [4] => standard
   [5] => phalcon
   [6] => pdo_mysql
   ...
)
پیکربندی Apache برای کار با Phalcon
Apache یه وب‌سرور معروف و رایج هست که برروی بسترهای زیادی قابل استفاده است. برای استفاده از فالکُن درکنار این وب‌سرور میتونین از تنظیمات زیر استفاده کنین. این تنظیمات اساساً برپایه‌ی ماژول mod_rewrite هستن که به شما اجازه‌ی استفاده از URLهای تمیز و سازگار با SEO و کامپوننت Router فالکن رو میده. عموماً یه برنامه از چنین ساختاری پیروی میکنه:
project_folder/
   app/
       controllers/
       models/
       views/
   public/
       css/
       img/
       js/
       index.php

یک پوشه فرعی داخل ریشه‌ی وب‌سرور
رایج‌ترین وضعیت اینه که برنامه توی یه فولدر داخل ریشه‌ی وب‌سرور ذخیره میشه (بخصوص در localhost). در این حالت ما از دو فایل .htaccess استفاده میکنیم. اولی برای پنهان‌کردن کدهای برنامه و ارجاع تمام درخواست‌ها به پوشه‌ی عمومی برنامه (public/) بکار میره:
# project_folder/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^$ public/ [L]
   RewriteRule ((?s).*) public/$1 [L]
</IfModule>

حالا یه فایل .htaccess دیگه داخل پوشه‌ی public/ لازمه. این فایل تمام آدرس‌های درخواستی رو به public/index.php ارجاع میده:
# project_folder/public/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-l
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

اگه نمیخواین از فایل .htaccess استفاده کنین، میتونین این تنظیمات رو به فایل پیکربندی اصلی آپاچی (httpd.conf یا apache2.conf) منتقل کنین:
<IfModule mod_rewrite.c>
   <Directory "/var/www/project_folder">
       RewriteEngine on
       RewriteRule ^$ public/ [L]
       RewriteRule ((?s).*) public/$1 [L]
   </Directory>
   <Directory "/var/www/project_folder/public">
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-l
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
   </Directory>
</IfModule>

هاست‌های مجازی
این حالت دومین روش پیکربندی هست که به شما اجازه میده که یه پروژه‌ی Phalcon رو توی یه هاست مجازی راه‌اندازی کنین:
<VirtualHost *:80>
   ServerAdmin admin@example.host
   DocumentRoot "/var/vhosts/project_folder/public"
   DirectoryIndex index.php
   ServerName example.host
   ServerAlias http://www.example.host
   <Directory "/var/vhosts/project_folder/public">
       Options All
       AllowOverride All
       Allow from all
   </Directory>
</VirtualHost>

و اگه از Apache نسخه‌ی 2.4 یا بالاتر استفاده میکنین:
<VirtualHost *:80>
   ServerAdmin admin@example.host
   DocumentRoot "/var/vhosts/public_folder/public"
   DirectoryIndex index.php
   ServerName example.host
   ServerAlias http://www.example.host
   <Directory "/var/vhosts/project_folder/public">
       Options All
       AllowOverride All
       Require all granted
   </Directory>
</VirtualHost>
پیکربندی Nginx برای کار با Phalcon
Nginx یه سرور HTTP و پراکسی معکوس و همچنین یک پراکسی IMAP/POP3 با کارآیی بالا و رایگان و بازمتن محسوب میشه. برخلاف سرورهای عادی، Nginx به Threadها برای مدیریت درخواست‌ها تکیه نمیکنه. درعوض از یک معماری مقیاس‌پذیرتر بصورت رویدادگرا (غیرهمزمان یا Asynchronous) بهره می‌بره. این معماری باعث میشه حافظه‌ی کمتر و قابل‌انتظارتری مصرف بشه.

مدیر پردازش‌های FastCGI (به‌اختصار PHP-FPM) معمولاً برای اینکه به Nginx اجازه‌ی پردازش فایل‌های PHP داده بشه، بکار میره. امروزه PHP-FPM همراه هر توزیع PHP مبتنی بر Unix ارائه میشه. ترکیب Phalcon و Nginx و PHP-FPM یه مجموعه‌ی قدرتمند از ابزارهایی رو به شما ارائه میده که بیشترین کارآیی رو درخصوص برنامه‌های PHP شما فراهم میکنه.

تنظیمات زیر، حالت احتمالی مناسب رو برای پیکربندی Nginx درکنار فالکُن نشون میدن.

پیکربندی ابتدایی
استفاده از $_GET['_url'] بعنوان منبع آدرس‌های درخواستی:
server {
    listen 80;
    server_name localhost.dev;
    root /var/www/phalcon/public;
    index index.php index.html index.htm;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    location ~ .php {
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index /index.php;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /.ht {
        deny all;
    }
}

استفاده از $_SERVER['REQUEST_URI'] بعنوان منبع آدرس‌های درخواستی:
server {
    listen 80;
    server_name localhost.dev;
    root /var/www/phalcon/public;
    index index.php index.html index.htm;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ .php$ {
        try_files $uri =404;

        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index /index.php;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /.ht {
        deny all;
    }
}
پیکربندی Cherokee برای کار با Phalcon
Cherokee یک وب‌سرور با کارآیی بالا، بسیار سریع و انعطاف‌پذیره که کارکردن با اون هم خیلی راحته. از اونجا که این وب‌سرور خیلی کم استفاده میشه، آموزش پیکربندی اون رو به سایت خود فریمورک Phalcon ارجاع میدیم: لینک