إنشاء وتشغيل مشروع Phalcon
ما هو Phalcon؟
Phalcon هو إطار PHP عالي الأداء، يتم تنفيذه كملحق بلغة C، مما يوفر كفاءة عالية في التنفيذ. يتبنى بنية MVC (نموذج-عرض-متحكم)، ويهدف إلى توفير تجربة تطوير سريعة ومرنة للمطورين مع الحفاظ على الأداء العالي.
الميزات والفوائد الرئيسية لـ Phalcon
- أداء عالي: نظرًا لأن Phalcon يتم تنفيذه كملحق بلغة C، فإنه يوفر أداءً استثنائيًا.
- وظائف غنية: بما في ذلك ORM ومحرك القوالب والتوجيه والتخزين المؤقت وصفوف الانتظار، مما يلبي احتياجات التطوير المختلفة.
- استهلاك منخفض للذاكرة: بفضل طريقة تنفيذه الفريدة، فإن Phalcon يستهلك ذاكرة قليلة جدًا أثناء التشغيل.
- سهل الاستخدام: يوفر API بسيطًا وسهل الاستخدام ووثائق واضحة، مما يساعد المطورين على البدء بسرعة.
- تصميم معياري: يمكن اختيار واستخدام وحدات مختلفة حسب الحاجة، مما يمنحه درجة عالية من المرونة.
Phalcon هو الخيار المثالي لبناء تطبيقات الويب وواجهات برمجة التطبيقات عالية الأداء، وهو مناسب لمشاريع تتراوح من التطبيقات الصغيرة إلى الأنظمة المؤسسية الكبيرة.
استخدام ServBay لإنشاء وتشغيل مشروع Phalcon
في هذه المقالة، سنستخدم بيئة PHP المقدمة من ServBay لإنشاء وتشغيل مشروع Phalcon. سنستفيد من ميزة "المضيف" التي يوفرها ServBay لإعداد خادم الويب وتكوين الوصول للمشروع بسهولة.
ملاحظة: إذا كنت مستخدمًا سابقًا لـ NGINX أو Apache
يستخدم ServBay بشكل افتراضي Caddy كخادم ويب. للمستخدمين الذين يقومون بالتحويل من NGINX وApache إلى ServBay، هناك بعض النقاط الأساسية التي يجب مراعاتها:
تكوين Caddy
تم تضمين Caddy في ServBay بشكل افتراضي وتم تحسين إعداده. يمكن للمطورين إدارة المواقع باستخدام ميزة "المضيف" في ServBay دون الحاجة إلى تعديل ملفات تكوين Caddy يدويًا.
قواعد إعادة الكتابة و.htaccess
عادةً ما يحتاج المطورون في NGINX وApache إلى كتابة قواعد إعادة الكتابة وملفات .htaccess يدويًا للتعامل مع إعادة كتابة URL والإعدادات الأخرى. في ServBay، تم إعداد قواعد Caddy بشكل افتراضي، لذلك لا يحتاج المطورون إلى كتابة هذه القواعد بأنفسهم إلا إذا كانت لديهم حاجة خاصة.
لمعرفة المزيد
لمزيد من المعلومات، يرجى مراجعة Rewrite وhtaccess وكيفية نقل موقع Apache إلى ServBay وكيفية نقل موقع NGINX إلى ServBay.
ملاحظة: تفعيل وحدة Phalcon
تم تضمين وحدة Phalcon في ServBay، ويحتاج المستخدمون إلى تفعيلها وإعادة تشغيل PHP. يرجى الرجوع إلى كيفية تفعيل وحدة Phalcon المدمجة في ServBay لتفعيل وحدة Phalcon.
إصدارات مختلفة من Phalcon وDevTools
اعتمادًا على إصدار PHP، تحتاج إلى تثبيت إصدار مختلف من Phalcon DevTools:
- PHP 5.6 و7.0 و7.1: Phalcon 3.4.5
- إصدار Phalcon DevTools المقابل:
3.4.x
- إصدار Phalcon DevTools المقابل:
- PHP 7.2 و7.3 و7.4: Phalcon 4.1.2
- إصدار Phalcon DevTools المقابل:
4.3.x
- إصدار Phalcon DevTools المقابل:
- PHP 8.0 و8.1 و8.2 و8.3 و8.4: Phalcon 5.7.0
- إصدار Phalcon DevTools المقابل:
5.0.x
(نظرًا لأن دعم أدوات DevTools الرسمية لـ PHP 8.x ليس جيدًا، يُوصى باستخدام الإصدار المحسن)
- إصدار Phalcon DevTools المقابل:
إنشاء مشروع Phalcon
TIP
ينصح ServBay المطورين بوضع المواقع في الدليل /Applications/ServBay/www
لتسهيل الإدارة.
تثبيت Composer
يأتي ServBay مع Composer مثبتة مسبقًا، فلا حاجة لتثبيته بشكل منفصل.
إنشاء دليل المشروع
إنشاء دليل المشروع والدخول إليه:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3تثبيت Phalcon DevTools
تثبيت Phalcon DevTools وفقًا لإصدار PHP:
PHP 5.6 و7.0 و7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2 و7.3 و7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0 و8.1 و8.2 و8.3 و8.4:
إنشاء ملف
composer.json
وإدخال المحتوى التالي
{
"repositories": [
{
"url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git",
"type": "git"
}
],
"require": {
"phalcon/devtools": "dev-master"
},
"minimum-stability": "dev",
"prefer-stable": true
}
2
3
4
5
6
7
8
9
10
11
12
13
ثم تشغيل
composer update
إنشاء مشروع Phalcon
استخدام Phalcon DevTools لإنشاء مشروع Phalcon جديد:
bashvendor/bin/phalcon project servbay-phalcon-app
1الدخول إلى دليل المشروع
الدخول إلى دليل مشروع Phalcon الذي تم إنشاؤه حديثًا:
bashcd servbay-phalcon-app
1
الإعداد الأولي
تهيئة متغيرات البيئة
في ملف
app/config/config.php
، قم بتكوين معلومات اتصال قاعدة البيانات ومتغيرات البيئة الأخرى. تأكد من ضبط الإعدادات التالية بشكل صحيح:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
تكوين خادم الويب
باستخدام ميزة "المضيف" في ServBay، يمكن الوصول إلى مشروع Phalcon عبر خادم الويب. في إعدادات "المضيف" في ServBay، أضف مضيفًا جديدًا:
- الاسم:
My First Phalcon Dev Site
- اسم المجال:
servbay-phalcon-test.local
- نوع الموقع:
PHP
- إصدار PHP: حدد إصدار PHP المناسب
- دليل الجذر للموقع:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
يُرجى الرجوع إلى إضافة الموقع الأول للخطوات التفصيلية.
إضافة كود المثال
في ملف app/config/routes.php
، أضف الكود التالي لطباعة "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
في ملف app/controllers/IndexController.php
، أضف الكود التالي:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
الوصول إلى الموقع
افتح المتصفح، وزر https://servbay-phalcon-test.local
، وسترى خروج النص Hello ServBay!
.
مثال قاعدة بيانات NoSQL
مثال Memcached
تثبيت ملحق Memcached
تم تضمين ملحق Memcached في ServBay مسبقًا، ولا حاجة لتثبيته.
تكوين Memcached
في ملف
app/config/config.php
، أضف معلومات اتصال Memcached:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14تكوين التوجيه
في ملف
app/config/routes.php
، أضف الكود التالي:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7استخدام Memcached
استخدام التخزين المؤقت في وحدة التحكم:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
افتح المتصفح، وزر https://servbay-phalcon-test.local/memcached
مثال Redis
تثبيت ملحق Redis
تم تضمين ملحق Redis في ServBay مسبقًا، ولا حاجة لتثبيته.
تكوين Redis
في ملف
app/config/config.php
، أضف معلومات اتصال Redis:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14تكوين التوجيه
في ملف
app/config/routes.php
، أضف الكود التالي:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7استخدام Redis
استخدام التخزين المؤقت في وحدة التحكم:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
افتح المتصفح، وزر https://servbay-phalcon-test.local/redis
مثال قاعدة بيانات SQL
إنشاء بنية قاعدة البيانات وملفات الهجرة
إنشاء ملف الهجرة
استخدام Phalcon DevTools لإنشاء ملف هجرة:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1تحرير ملف الهجرة
في دليل
migrations
، أنشئ ملف هجرة جديد وقم بتحريره لتعريف بنية قاعدة البيانات:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44تشغيل الهجرة
استخدام Phalcon DevTools لتشغيل الهجرة وإنشاء جدول قاعدة البيانات:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
مثال MySQL
تكوين MySQL
في ملف
app/config/config.php
، قم بتكوين معلومات اتصال MySQL:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9تكوين التوجيه
في ملف
app/config/routes.php
، أضف الكود التالي:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15كتابة بيانات المستخدم
كتابة بيانات المستخدم في وحدة التحكم:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo json_encode($users); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
افتح المتصفح، وزر https://servbay-phalcon-test.local/mysql-add
وhttps://servbay-phalcon-test.local/mysql
مثال PostgreSQL
تكوين PostgreSQL
في ملف
app/config/config.php
، قم بتكوين معلومات اتصال PostgreSQL:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9تكوين التوجيه
في ملف
app/config/routes.php
، أضف الكود التالي:php$router->add( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15كتابة بيانات المستخدم
كتابة بيانات المستخدم في وحدة التحكم:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function pgsqlAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35