Phalcon Framework

Phalcon İlk Proje Oluşturma

Phalcon Tools içinde yer alan araçlar, proje çatısı kodunu oluşturmak için kullanılan komut yapılarıdır. Uygulamamızın temel bileşenlerini basit bir komutla oluşturulabilir, böylece Phalcon'u kullanarak uygulamaları kolayca geliştirebiliriz.

Proje çatısını oluşturma

1. Bir komut penceresinde, "cd c:\wamp\www" DOS komutu ile ana dizine geçiş yaptıktan sonra, "Phalcon" yazarak tüm komutları görelim. Sonra, aşağıdaki komut ile "c:\wamp\www" dizini altında "phalcon-proj" adlı projemizi oluşturalım.

phalcon create phalcon-proj

Yukarıdaki komutu yazdığımızda "phalcon-proj" adlı projemiz oluşturulur ve ekran görüntüsü aşağıdakine benzer bir hal alır.

Yukarıdaki işlem ile birlikte, bilgisayarımızda oluşturulan dizin ve dosya yapısı aşağıdaki şekildeki gibidir.

WAmp sunucu üzerinden oluşturulan projeye giriş yaptığımızda, karşımıza aşağıdakine benzer bir ekran görüntüsü gelir.

Proje yapısını inceleme

Projemizin yer aldığı "phalcon-proj" dizini altında "app", "cache" ve "public" olmak üzere 3 adet dizin bulunmaktadır.

Ana dizin altında bulunan ".htrouter.php" dosyası, sunucu çalıştığında gelen tüm URL değerlerine işlem yaparak "public" dizini altında bulunan "index.php" dosyasına gönderir.

.htrouter.php

<?php

/*
  +------------------------------------------------------------------------+
  | Phalcon Developer Tools                                                |
  +------------------------------------------------------------------------+
  | Copyright (c) 2011-2016 Phalcon Team (https://www.phalconphp.com)      |
  +------------------------------------------------------------------------+
  | This source file is subject to the New BSD License that is bundled     |
  | with this package in the file LICENSE.txt.                             |
  |                                                                        |
  | If you did not receive a copy of the license and are unable to         |
  | obtain it through the world-wide-web, please send an email             |
  | to license@phalconphp.com so we can send you a copy immediately.       |
  +------------------------------------------------------------------------+
  | Authors: Andres Gutierrez <andres@phalconphp.com>                      |
  |          Eduar Carvajal <eduar@phalconphp.com>                         |
  |          Serghei Iakovlev <serghei@phalconphp.com>                     |
  +------------------------------------------------------------------------+
*/

$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));

if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) {
    return false;
}

$_GET['_url'] = $_SERVER['REQUEST_URI'];

require_once __DIR__ . '/public/index.php';

"public" dizini altında bulunan "index.php" dosyası projemizin ana giriş noktasıdır. MVC çalışma sistemine uygun olarak, URL satırından gelen her türlü istek sunucu tarafından "index.php" dosyasına gönderilmekte, dosya içinde gelene isteğe bağlı olarak gerekli yönlendirmeler yapılarak işlem gerçekleştirilmektedir.

public/index.php

<?php
use Phalcon\Di\FactoryDefault;

error_reporting(E_ALL);

define('BASE_PATH', dirname(__DIR__));
define('APP_PATH', BASE_PATH . '/app');

try {

    /**
     * The FactoryDefault Dependency Injector automatically registers
     * the services that provide a full stack framework.
     */
    $di = new FactoryDefault();

    /**
     * Handle routes
     */
    include APP_PATH . '/config/router.php';

    /**
     * Read services
     */
    include APP_PATH . '/config/services.php';

    /**
     * Get config service for use in inline setup below
     */
    $config = $di->getConfig();

    /**
     * Include Autoloader
     */
    include APP_PATH . '/config/loader.php';

    /**
     * Handle the request
     */
    $application = new \Phalcon\Mvc\Application($di);

    echo str_replace(["\n","\r","\t"], '', $application->handle()->getContent());

} catch (\Exception $e) {
    echo $e->getMessage() . '<br>';
    echo '<pre>' . $e->getTraceAsString() . '</pre>';
}

"app/views" dizini altında bulunan "index.phtml" dosyası ekranda gösterilen ve projemizin ana temasını oluşturan dosyadır.

app/views/index.phtml

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
        <title>Phalcon PHP Framework</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <link rel="shortcut icon" type="image/x-icon" href="<?php echo $this->url->get('img/favicon.ico')?>"/>
    </head>
    <body>
        <div class="container">
            <?php echo $this->getContent(); ?>
        </div>
        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
        <!-- Latest compiled and minified JavaScript -->
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </body>
</html>

"app/views/index" dizini altında bulunan "index.phtml" dosyası ise "app/views/index.phtml" dosyasından $this->getContent(); komutu ile çağrılarak ekrana yazılan dosyadır. Bu işlemi, include() veya require() komutları ile yapılan dahil etme işlemi gibi düşünebiliriz.

app/views/index/index.phtml

<div class="page-header">
  <h1>Congratulations!</h1>
</div>

<p>You're now flying with Phalcon. Great things are about to happen!</p>

<p>This page is located at <code>views/index/index.phtml</code></p>

Sonuç olarak elde edilen dosya aşağıdaki şekilde olacaktır.

app/views/index.phtml (app/views/index/index.phtml ile birlikte)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
        <title>Phalcon PHP Framework</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <link rel="shortcut icon" type="image/x-icon" href="<?php echo $this->url->get('img/favicon.ico')?>"/>
    </head>
    <body>
        <div class="container">
          <div class="page-header">
            <h1>Congratulations!</h1>
          </div>

          <p>You're now flying with Phalcon. Great things are about to happen!</p>

          <p>This page is located at <code>views/index/index.phtml</code></p>
        </div>
        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
        <!-- Latest compiled and minified JavaScript -->
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </body>
</html>