Merhaba Phalcon 2.0!

Eklenti olarak sunulan ve yüksek performansa sahip, kullanımı pratik PHP çatısı!

Fatih Emre

  • PHP Eğitmenliği
  • Kurumsal Eğitimler
  • Çocuk Gözüyle Bilgisayar
  • Microsoft Yazılım ve Sistem Uzmanlığı
  • Üsküdar Üniversitesi - Yazılım

/CsharpProgrammer

/HappyPHPer

/FatihEmre

Phalcon der ki;

Web server çalıştığında, PHP ile birlikte yüklenir.

Phalcon der ki;

Hiç bir dosya bağlamadan tüm sınıflar her an kullanılabilir.

Phalcon der ki;

 Kodlar bir kere derlendiği için, tekrar tekrar yorumlanmaz.

Phalcon der ki;

En yüksek performansı sağlar.

Phalcon 1.x

vs

Phalcon 2.x

Zephir!

namespace Utils;

class Greeting
{

    public static function say()
    {
        echo "hello world!";
    }

}
$ zephir build
...
Extension installed!
Add extension=utils.so to your php.ini
Don't forget to restart your web server

C dili ile hazırlanmış ORM kullandığı için oldukça veritabanına erişimde hızlıdır.

Veritabanına Erişim

<?php

// 1453 id değerine sahip kaydı bulalım.
$user = Users::findFirst(1453);

// Çıktı: "Sultan Mehmet"
echo $user->name;
<?php

// 1453 id değerine sahip kaydı bulalım.
$user = Users::findFirst(1453);

// Eski kaydı, yenisi ile güncelleyelim.
$user->name = "Fatih Sultan Mehmet";
$user->save();
<?php

$users = Users::find(array(
    "conditions" => "role = ?1",
    "bind"       => array(1 => "editor"),
    "columns"    => "id, name, email, role",
    "order"      => "created_at DESC",
    "limit"      => 20
));

/* Sonucu obje olarak kullanabilirsiniz. */
foreach($users as $user)
    echo $user->name;

/* Sonucu dizi olarak kullanabilirsiniz. */
foreach($users->toArray() as $user)
    echo $user['name'];
<?php

$users = Users::query()
    ->where("role = :role:")
    ->andWhere("age < 18")
    ->bind(array("role" => "editor"))
    ->order("name")
    ->execute();
<?php

$users = Users::find()->filter(function($user) {

    // Sadece geçerli epostaya sahip üyeleri göndür.
    if (filter_var($user->email, FILTER_VALIDATE_EMAIL)) {
        return $user;
    }

});
<?php

use Phalcon\Mvc\Model;

class Users extends Model
{
    public $id;

    public $name;

    public $role_id;

    public function initialize()
    {
        $this->belongsTo('role_id', 'Roles', 'id', array('alias'=>'Role'));
    }

}

// Users::findFirst(1)->getRole()->name;
<?php

use Phalcon\Mvc\Model;

class Roles extends Model
{
    public $id;

    public $name;

    public function initialize()
    {
        $this->hasMany('id', 'Users', 'role_id', array('alias'=>'Users'));
    }

}

// Roles::findFirst(1)->getUsers();
<?php

$count = Users::count();

$sum = Users::sum(array('column'=>'age'));

$average = Users::average(array('column'=>'age'));

$maximum = Users::maximum(array('column'=>'age'));

$minimum = Users::minimum(array('column'=>'age'));

C dili ile hazırlanmış Template Engine (Volt) kullandığı için şablonlar oldukça hızlı yorumlanır.

Şablon Yorumlama

<h1>Users</h1>

<ul>

{% for user in users %}
    <li>{{ user.name|e }}</li>
{% else %}
    <li>No result.</li>
{% endfor %}

</ul>
<h1>Editors</h1>

<ul>

{% for user in role.getUsers() %}
    <li>{{ user.name|e }}</li>
{% else %}
    <li>No result.</li>
{% endfor %}

</ul>
<h1>Editors</h1>

<ul>

{% for user in role.getUsers() %}
    <li>{{ user.name|e }}</li>
{% else %}
    <li>No result.</li>
{% endfor %}

</ul>
{% if user.role == "admin" %}

    {{ user.name }} yöneticidir.

{% elseif user.role == "editor" %}

    {{ user.name }} editördür.

{% else %}

    {{ user.name }} halktır.

{% endif %}

Phalcon, MVC tabanlı uygulama geliştirmeniz için biçilmiş bir kaftandır.

MVC desteği ile gelir

Phalcon, MVC tabanlı uygulama geliştirmeniz için biçilmiş bir kaftandır.

MVC desteği ile gelir

<?php

try {
	
	$config = include(__DIR__."/../app/config/config.php");
	$loader = new \Phalcon\Loader();
	
	$loader->registerDirs(
		array(
			$config->dirs->controllersDir,
			$config->dirs->modelsDir
		)
	)->register();
	
	$di = new \Phalcon\DI\FactoryDefault();
	
	$di->set('url', function() use ($config) {
		$url = new \Phalcon\Mvc\Url();
		$url->setBaseUri($config->site->url);
		return $url;
	});
	
	$di->set('view', function() use ($config) {
		$view = new \Phalcon\Mvc\View();
		$view->setViewsDir($config->dirs->viewsDir);
		return $view;
	});
	
	$di->set('db', function() use ($config) {
		return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
			"host" => $config->db->host,
			"username" => $config->db->username,
			"password" => $config->db->password,
			"dbname" => $config->db->name
		));
	});
	
	$di->set('session', function() {
		$session = new \Phalcon\Session\Adapter\Files();
		$session->start();
		return $session;
	});
	
	$application = new \Phalcon\Mvc\Application();
	$application->setDI($di);
	echo $application->handle()->getContent();
} catch (Phalcon\Exception $e) {
	echo $e->getMessage();
} catch (PDOException $e){
	echo $e->getMessage();
}
<?php

use \Phalcon\Mvc\Controller;

class IndexController extends Controller
{
    public function initialize()
    {
        // like __construct();
    }

    public function indexAction()
    {
    }
}
<?php

use \Phalcon\Mvc\Model;

class Users extends Model
{
    public $id;
    public $name;
    public $role;

    public function getSource()
    {
        return "my_user_table";
    }

    public function onConstruct()
    {
        // van tu tri foro...
    }

    public function getRole()
    {
        return $this->role == 'admin' ? 'Yönetici' : 'Üye';
    }

    public function setRole($role)
    {
        $this->role = $role == 'Yönetici' ? 'admin' : 'user';
    }

}

Micro MVC ile Rest API yazmak oldukça keyiflidir.

Micro MVC

<?php

use Phalcon\Mvc\Micro;

$app = new Micro();

$app->get('/api/users', function() {
    // Tüm kullanıcıları ver.
});

$app->get('/api/users/search/{name}', function($name) {
    // Kullanıcılar arasında arama yap.
});

$app->get('/api/user/{id:[0-9]+}', function($id) {
    // Bir kullanıcıyı ver.
});

$app->post('/api/users', function() {
    // Yeni kullanıcı ekle.
    $user = $app->request->getJsonRawBody();
    $response->setJsonContent(array('status' => 'OK'));
    return $response;
});

$app->put('/api/user/{id:[0-9]+}', function() {
    // Kullanıcıyı güncelle.
});

$app->delete('/api/user/{id:[0-9]+}', function() {
    // Kullanıcıyı sil.
});

$app->handle();

PHP eklentisi olarak sunulan Phalcon, diğer FW'ler ile kıyaslanmamalıdır.

Ama .....

Performans

İstek / Saniye

Bellek Tüketimi

Ne Faydasını Gördük?

Teşekkürler :)

Sorular?

Merhaba Phalcon 2.0!

By Fatih Emre

Merhaba Phalcon 2.0!

Phalcon 2.0 ile ilgili kodlar ile desteklenmiş, basit seviye sunu

  • 2,042