Fatih Emre
Senior Software Developer at Logo Yazılım
Eklenti olarak sunulan ve yüksek performansa sahip, kullanımı pratik PHP çatısı!
/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?
By Fatih Emre
Phalcon 2.0 ile ilgili kodlar ile desteklenmiş, basit seviye sunu