یک چارچوب نرم‌افزاری PHP به عنوان یک افزونه از C

معماری نوآورانه آن باعث شده است که فالکن به عنوان سریع‌ترین چارچوب نرم‌افزاری PHP شناخته شود!

Developers do not need to know C to use Phalcon. Its functionality is exposed as PHP classes and interfaces under the Phalcon namespace, ready to be used.
Features
  • بسیار سبک
  • ORM
  • PHQL
  • تراکنش‌ها
  • حافظه موقت
  • ویو و رابط کاربری
  • موتورهای قالب
  • موتور قالب (Volt)
  • بومی‌سازی
  • فرم ساز
  • پیام‌های اطلاع‌رسانی

  • بسیار سبک
    مصرف حافظه و پردازنده کمتر نسبت به چارچوب‌های نرم‌افزاری متداول
  • MVC و HMVC
    ماژول، کامپوننت، مدل، ویو و کنترلر
  • مدیریت وابستگی
    مدیریت وابستگی و مکان سرویس‌ها، که خود دربرگیرنده آن است.
  • Rest
    In this case, you can use either a micro or full stack application to meet your goal. In addition, a powerful set of HTTP helpers.
  • Autoloader
    مکانیزم autoloading از کلاس‌های PHP را با توجه به PSR-4 فراهم می‌کند.
  • Router
    Phalcon\Mvc\Router قابلیت‌های پیشرفته مسیریابی را فراهم می‌کند.
بسیار سبک
افزونه C از PHP (فالکن)
  • افزونه‌های Zephir/C هنگام شروع فرآیند پس‌زمینه وب سرور یکبار همراه با PHP بارگیری می‌شوند
  • کلاس‌ها و توابع فراهم شده توسط افزونه قابل استفاده برای هر برنامه‌ای هستند
  • کد به صورت کامپایل شده و نه تفسیر شده عمل می‌کند چرا که قبل از آن به یک پلتفرم و پردازنده خاص کامپایل شده است
  • به لطف معماری سطح-پایین و بهینه‌سازی‌های آن، فالکن سبک‌ترین راهکار را برای برنامه‌های MVC فراهم می‌کند
MVC
برنامه‌های تک و ماژولار را به راحتی و لذت ایجاد کنید. از ساختار فایل، شماتیک و الگوهای خود بهره‌مند شوید.
                        
single/
    app/
        controllers/
        models/
        views/
    public/
        css/
        img/
        js/

                        
                    
                        
multiple/
     apps/
       frontend/
          controllers/
          models/
          views/
          Module.php
       backend/
          controllers/
          models/
          views/
          Module.php
       public/
       ../
                        
                    
مدیریت وابستگی
فالکن بر اساس یک الگوی ساده و در عین حال قدرتمند بنام مدیریت وابستگی یا Dependency Injection ساخته شده است. سرویس‌ها فقط یکبار تعریف یا مقداردهی اولیه کرده - سپس در تمام برنامه‌ها از آن‌ها استفاده کنید.
                        
// Create the Dependency Injector Container
$di = new Phalcon\DI();

// Register classes, functions, components
$di->set("request", new Phalcon\Http\Request());

..

// Use anywhere else in code
$request = $di->getShared('request');
                        
                    
خدمات Restful
نوشتن برنامه‌ها و سرورهای REST هیچگاه به این آسانی نبوده است. بدون کد اولیه، سرویس‌های ساده تنها در یک فایل قرار می‌گیرند.
                        
use Phalcon\Mvc\Micro;

$app = new Micro();

// بازگردانی داده به JSON
$app->get(
    '/check/status',
    function () {
        return $this
            ->response
            ->setJsonContent(
                [
                    'status' => 'important',
                ]
            )
        ;
    }
);

$app->handle();
                        
                    
Autoloader
فضای نامگذاری، پیشوندها، دایرکتوری‌ها یا کلاس‌ها را ثبت کنید. از رویدادهای autoloader بهره‌مند شده و کنترل کامل بارگیری فایل‌ها از نقاط مختلف را بدست بگیرید.
                        
use Phalcon\Loader;

// Autoloader را ایجاد می‌کند
$loader = new Loader();

// ثبت namespace جدید
$loader->registerNamespaces(
    [
       'Example\Base'    => 'vendor/example/base/',
       'Example\Adapter' => 'vendor/example/adapter/',
       'Example'         => 'vendor/example/',
    ]
);

// ثبت autoloader
$loader->register();
                        
                    
Router
مسیریابی، به معنای واقعی کلمه. نه بیشتر، نه کمتر.
                        
// Create the router
$router = new \Phalcon\Mvc\Router();

// تعریف یک مسیر
$router->add(
   '/admin/users/my-profile',
   [
       'controller' => 'users',
       'action'     => 'profile',
   ]
);
                        
                    
  • ORM
    Object Relational Mapping
  • PHQL
    ابزار قدرتمند و امن زبان پرسجوی فالکن یا PHQL
  • تراکنش‌ها
    تراکنش‌ها در فالکن امکان حفظ جامعیت داده را فراهم می‌کنند.
  • حافظه موقت
    بهبود عملکرد شما همراه با بسیاری از مکانیزم‌های حافظه موقت که فالکن فراهم می‌کند
ORM
یک ORM قدرتمند توسط فالکن فراهم شده است تا رکوردهای پایگاه‌داده را به عنوان کلاس یا شی مدیریت کنید. MySQL، PostgreSQL و SQLite به صورت پیشفرض پشتیبانی می‌شوند.
                        
use Invoices;
use Phalcon\Mvc\Model;

class Customers extends Model
{
    public $cst_id;

    public $cst_name;

    public function initialize()
    {
        $this->hasMany(
            'cst_id',
            Invoices::class,
            'inv_cst_id'
        );
    }
}
                        
                    
PHQL
PHQL یک گونه سطح-بالا، شی‌گرا از SQL است که به شما اجازه می‌دهد پرسجوهای خود را مشابه یک زبان SQL بنویسید. PHQL به عنوان یک مفسر (به زبان C) پیاده‌سازی شده است که پرسجو را به پایگاه‌داده رابطه‌ای مقصد ترجمه می‌کند. برای دستیابی به بالاترین عملکرد ممکن، فالکن از مفسری استفاده می‌کند که فناوری مشابه SQLite را دارد. این فناوری یک مفسر درون-حافظه‌ای کوچک همراه با ردپای بسیار ناچیز در حافظه به صورت ایمن را فراهم می‌کند.
                        
$phql  = 'SELECT * '
       . 'FROM Formula\Cars '
       . 'ORDER BY Formula\Cars.name';
$query = $manager->createQuery($phql);

$phql  = 'SELECT Formula\Cars.name '
       . 'FROM Formula\Cars '
       . 'ORDER BY Formula\Cars.name';
$query = $manager->createQuery($phql);

$phql  = 'SELECT c.name '
       . 'FROM Formula\Cars c '
       . 'ORDER BY c.name';
$query = $manager->createQuery($phql);

$phql = 'SELECT c.* '
      . 'FROM Cars AS c '
      . 'ORDER BY c.name';
$cars = $manager->executeQuery($phql);

foreach ($cars as $car) {
    echo "Name: ", $car->name, "\n";
}
                        
                    
تراکنش‌ها
زمانی که یک فرآیند چندین عملیات پایگاه‌داده را اجرا می‌کند، مهم است که هر گام به درستی کامل شود تا جامعیت داده حفظ گردد. تراکنش‌ها این امکان را فراهم می‌کنند تا همه عملیات پایگاه‌داده قبل از اینکه داده درون آن ذخیره‌سازی شود، با موفقیت به پایان برسند.
                        
use Phalcon\Mvc\Model\Transaction\Failed;
use Phalcon\Mvc\Model\Transaction\Manager;

try {

    // Create a transaction manager
    $manager = new Manager();

    // Request a transaction
    $transaction = $manager->get();

    // Get the robots to be deleted
    $invoices = Invoices::find(
        'inv_cst_id = 123'
    );

    foreach ($invoices as $invoice) {
        $invoice->setTransaction($transaction);
        if ($invoice->delete() == false) {
            // Something is wrong - rollback transaction
            foreach ($invoice->getMessages() as $message) {
                $transaction
                    ->rollback($message->getMessage());
            }
        }
    }

    // Everything is OK - commit transaction
    $transaction->commit();

    echo "Robots were deleted successfully!";

} catch (Failed $e) {
    echo "Failed, reason:  ", $e->getMessage();
}
                        
                    
حافظه موقت
کامپوننت حافظه موقت امکان دسترسی سریع‌تر به داده پراستفاده یا پردازش شده را می‌دهد. از بسیاری مکانیزم‌های حافظه موقت مانند Redis، Memcached، Mongo، Apc، فایل و دیگر پشتیبانی می‌شود
                        
use Phalcon\Cache;
use Phalcon\Cache\AdapterFactory;
use Phalcon\Storage\Serializer\SerializerFactory;

$serializerFactory = new SerializerFactory();
$adapterFactory    = new AdapterFactory($serializerFactory);

$options = [
    'defaultSerializer' => 'Json',
    'lifetime'          => 7200
];

$adapter = $adapterFactory
    ->newInstance('apcu', $options);

$cache = new Cache($adapter);
                        
                    
  • موتورهای قالب
    View معرف رابط کاربری برنامه شماست
  • موتور قالب (Volt)
    یک موتور قالب که از Jinja الهام گرفته شده و برای PHP به C نوشته شده است
  • بومی‌سازی
    برنامه‌های خود را به راحتی به چندین زبان ترجمه کنید
  • فرم ساز
    به راحتی فرم‌های HTML ایجاد کنید
  • پیام‌های اطلاع‌رسانی
    این پیام‌ها برای اطلاع‌رسانی به کاربر از وضعیت موجود استفاده می‌شوند.
موتورهای قالب
ویو معرف رابط کاربری برنامه شماست. ویو معمولا فایل‌های HTML است که درون خود کد PHP دارند تا قسمتی از داده را نمایش دهند. ویو وظیفه فراهم کردن داده به مرورگر وب یا ایجاد درخواست از سمت برنامه شما را بر عهده دارد.
                        
<html>
    <body>
    <div class='top'>
        <?php $this->partial('shared/ad_banner'); ?>
    </div>
    <div class='content'>
        <h1>Robots</h1>
        <p>
            Check out our specials for robots:
        </p>
        ...
    </div>
    <div class='footer'>
        <?php $this->partial('shared/footer'); ?>
    </div>
    </body>
</html>
                        
                    
موتور قالب (Volt)
Volt is an ultra-fast and designer friendly templating language written in Zephir/C for PHP. It provides you a set of helpers to write views in an easy way. Volt is highly integrated with other components of Phalcon, just as you can use it as a stand-alone component in your applications.
                        
{# app/views/products/show.volt #}
{% block last_products %}
{% for prod in products %}
    * Name: {{ prod.name|e }}
    {% if prod.status == 'Active' %}
       Price: {{ prod.price + prod.taxes/100}}
    {% endif  %}
{% endfor  %}
{% endblock %}
                        
                    
بومی‌سازی
کامپوننت Phalcon\Translate به ایجاد برنامه‌های چندزبانه کمک می‌کند. برنامه‌هایی که از این کامپوننت استفاده می‌کنند، با توجه به انتخاب زبان پشتیبانی شده کاربر توسط برنامه، محتوا را به چندین زبان مختلف نمایش می‌دهند.
// app/messages/en.php
$messages = [
    'hi'      => 'Hello',
    'bye'     => 'Good Bye',
    'hi-name' => 'Hello %name%',
    'song'    => 'This song is %song%'
];

// app/messages/es.php
$messages = [
    'hi'      => 'Hola',
    'bye'     => 'Adiós',
    'hi-name' => 'Hola %name%',
    'song'    => 'Esta canción es %song%'
];

use Phalcon\Mvc\Controller;
use Phalcon\Translate\Adapter\NativeArray;

// UserController.php
class UserController extends Controller
{
    protected function getTranslation()
    {
        // Browser's best language
        $language = $this
            ->request
            ->getBestLanguage();

        // Check the lang translation file
        $fileName = 'app/messages/'
                  . $language
                  . '.php';
        if (file_exists($fileName) {
            require $fileName;
        } else {
            // بازگشت به یک گزینه پیشفرض
            require 'app/messages/en.php';
        }

        // بازگرداندن یک فایل ترجمه
        return new NativeArray(
            array(
                'content' => $messages
            )
        );
    }

    public function indexAction()
    {
        $this->view->name = 'Mike';

        $this->view->t = $this
            ->getTranslation();
    }
}
// user.volt
<p><?php echo $t->_('hi'), ' ', $name; ?></p>
                        
                    
فرم ساز
هر عنصر فرم می‌تواند به صورت اجباری از طرف توسعه‌دهنده تعریف شود. در عمل، Phalcon\Tag برای ایجاد HTML صحیح هر عنصر استفاده می‌گردد که می‌توانید ویژگی‌های بیشتری را با استفاده از پارامتر دوم تابع render() برای آن تعریف کنید:
                        
use Phalcon\Forms\Form;
use Phalcon\Forms\Element\Text;
use Phalcon\Forms\Element\Select;

$form = new Form();

$form->add(new Text('name'));

$form->add(new Text('telephone'));

$form->add(
    new Select(
        'telephoneType',
        array(
            'H' => 'Home',
            'C' => 'Cellphone'
        )
    )
);
                        
                    
پیام‌های اطلاع‌رسانی
برای نمایش اطلاعیه‌ها در یک برنامه وب، از دستور flash استفاده کنید:
                        
use Phalcon\Mvc\Controller;

class PostsController extends Controller
{
    public function saveAction()
    {
        $this->flash->error(
            'در این فرم خطاهایی رخ داده است'
        );
        $this->flash->success(
            'yes!, everything is fine'
        );
        $this->flash->notice(
            'این یک اطلاعیه برای کاربران است'
        );
        $this->flash->warning(
            'این فقط یک هشدار است'
        );
    }
}
                        
                    
  • فهرست کنترل دسترسی
    فهرست کنترل دسترسی به کاربران اجازه دسترسی به ماژول‌های مجاز را می‌دهد
  • همگام‌سازی
    اتصال، ذخیره‌سازی و بازگردانی داده از سامانه‌های مختلف پایگاه‌داده در یک زمان
  • Crypt
    رمزگذاری/رمزگشایی داده‌های مهم برای حفاظت نسبت به دسترسی‌های غیرمجاز
  • رویدادها
    با تنظیم 'hook point' کامپوننت‌های فالکن را گسترش دهید. رویدادهای بیشتری ایجاد کرده و برنامه خود را قدرتمندتر سازید
فهرست کنترل دسترسی
اینگونه می‌توانید فهرست کنترل دسترسی یا ACL بسازید:
                        
use Phalcon\Acl;
use Phalcon\Acl\Enum;
use Phalcon\Acl\Role;
use Phalcon\Acl\Adapter\Memory;

// ایجاد ACL
$acl = new Memory();

// عملکرد پیشفرض دسترسی DENY است
$acl->setDefaultAction(Enum::DENY);

// Register two roles, Users
// and Guests
$roles = array(
    'users'  => new Role('Users'),
    'guests' => new Role('Guests')
);

foreach ($roles as $role) {
    $acl->addRole($role);
}
                        
                    
همگام‌سازی
اتصال مدل‌ها به پایگاه‌داده‌های مختلف
                        
use Phalcon\Db\Adapter\Pdo\Mysql;
use Phalcon\Db\Adapter\Pdo\PostgreSQL;

// این سرویس یک پایگاه‌داده MySQL را باز می‌گرداند
$container->set(
    'dbMysql',
    function () {
        return new Mysql(
            [
                'host'     => 'localhost',
                'username' => 'root',
                'password' => 'secret',
                'dbname'   => 'tutorial',
            ]
        );
    }
);

// این سرویس یک پایگاه‌داده PostgreSQL را باز می‌گرداند
$container->set(
    'dbPostgres',
    function () {
        return new PostgreSQL(
            [
                'host'     => 'localhost',
                'username' => 'postgres',
                'password' => '',
                'dbname'   => 'invo',
            ]
        );
    }
);
                        
                    
رمزنگاری
فالکن امکانات رمزنگاری را از طریق کامپوننت Phalcon\Crypt فراهم می‌کند. این کلاس شامل نگاشتی از کتابخانه رمزنگاری OpenSSL برای PHP است.
                        
use Phalcon\Crypt;

$crypt = new Crypt();

$key  = 'این یک کلید خصوصی (۳۲ بایتی) است.';
$text = 'The text you want to encrypt.';

$encrypted = $crypt->encrypt($text, $key);

echo $crypt->decrypt($encrypted, $key);
                        
                    
مدیریت رویداد
یک EventsManager امکان اتصال listener به نوعی خاص از رویداد را برای ما فراهم می‌کند. نوع مورد علاقه ما 'dispatch' است. کد زیر تمام رویدادهای ایجاد شده برای Dispatcher را فیلتر می‌کند:
                        
use Phalcon\Mvc\Dispatcher;
use Phalcon\Events\Manager;

$container->set(
    'dispatcher',
    function () {
        // یک مدیر رویداد ایجاد می‌کند
        $manager = new Manager();

        // Listen for events produced in the
        // dispatcher using the SecurityPlugin
        $manager->attach(
            'dispatch:beforeExecuteRoute',
            new SecurityPlugin
        );

        // Handle exceptions and not-found
        // exceptions using NotFoundPlugin
        $manager->attach(
            'dispatch:beforeException',
            new NotFoundPlugin
        );

        $dispatcher = new Dispatcher();

        // Assign the events manager
        // to the dispatcher
        $dispatcher
            ->setEventsManager($manager);

        return $dispatcher;
    }
);
                        
                    
A polling app built from scratch in < 15 min
ویدیو دمو را مشاهده کنید
به جامعه کاربری توسعه‌دهندگان ما بپیوندید!
مشارکت جامعه کاربری در افزونه‌ها، پلاگین‌ها، آداپتورها، ماشین‌های مجازی، نمونه کدها و بسیاری موارد دیگر
مشارکت‌کنندگان فالکن
فالکون به صورت روزانه با کمک جامعه کاربری فوق‌العاده خوب بهبود می‌یابد
مشارکت