menu

Phalcon - Migration and seed


Pada tutorial kemarin kita sudah berkenalan dengan syntax-syntax phalcon,

Tutorial kali ini kita akan membuat migration dan seeder database, dikarenakan sampai saat tutorial ini dibuat phalcon belum menyediakan function untuk migration dan seed database maka kita akan membuatnya dengan cara manual.

Oke langsung saja kita mulai tutorialnya pertama, buat file mirgate.php pada path app/migrations/ dan isikan code berikut,
<?php

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

if (!function_exists('env')) {
    // Use composer autoloader to load vendor classes
 require_once BASE_PATH . '/vendor/autoload.php';

 /**
  * Environment variables
  */
 $dotenv = new Dotenv\Dotenv(BASE_PATH . '/');
 $dotenv->load();
}

$host = getenv('DB_HOST');
$user = getenv('DB_USER');
$pass = getenv('DB_PASS');
$dbname = getenv('DB_NAME');

try {
    $db = new PDO("mysql:host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec("CREATE DATABASE IF NOT EXISTS `$dbname`; CREATE USER '$user'@'localhost' IDENTIFIED BY '$pass'; GRANT ALL ON `$dbname`.* TO '$user'@'localhost'; FLUSH PRIVILEGES; DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci") 
    or die(print_r($db->errorInfo(), true));
} catch(PDOException $e) {
    die("DB ERROR: ". $e->getMessage());
}

//migrate
include_once "users.php";

//seed
include_once "user_seed.php";

echo "\n Success All!!! \n";

Selanjutnya, pada path yang sama buat file users.php dan isikan code berikut,
<?php

$tablename = "users";

try {
    $db = new PDO("mysql:dbname=$dbname;host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $db->exec("CREATE TABLE IF NOT EXISTS $tablename(
      id bigint( 20 ) AUTO_INCREMENT PRIMARY KEY,
      name varchar( 50 ) COLLATE utf8_unicode_ci NOT NULL,
      email varchar( 150 ) COLLATE utf8_unicode_ci NOT NULL, 
      address text( 150 ) COLLATE utf8_unicode_ci,
      created_at timestamp DEFAULT CURRENT_TIMESTAMP,
      updated_at timestamp DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
    print("Created $tablename Table success.\n");
} catch(PDOException $e) {
    echo $e->getMessage();
}

Terakhir, pada path yang sama juga buat file user_seed.php dan isikan code berikut,
<?php

$tablename = "users";

try {
    $db = new PDO("mysql:dbname=$dbname;host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $db->exec("TRUNCATE TABLE $tablename;");
    $db->exec("INSERT INTO $tablename (name, email, address) VALUES ('Dracule', 'dracule@mail.com', 'Jalan ganteng kali no. 1')");
    $db->exec("INSERT INTO $tablename (name, email, address) VALUES ('Mihawk', 'mihawk@mail.com', 'Jalan ganteng kali no. 2')");
    print("Seed $tablename Table success.\n");
} catch(PDOException $e) {
    echo $e->getMessage();
}

Sehingga tampilan struktur file nya akan tampak seperti ini,


Untuk mengetestnya, buka terminal dan arahkan pada path project anda, kemudian masukan syntax berikut pada terminal,
php app/mirgations/mirgate.php

Sehingga tampilanya akan tampak seperti ini,


Dan hasilnya akan tampak seperti ini,


===DONE!===

Phalcon - Introduction syntax


Pada tutorial kemarin kita sudah berexperiment menambahkan file .env dan membuat function dd yang digunakan untuk debug code,

Sebelum masuk ke tutorial crud maka ada baiknya kita biasakan diri terlebih dahulu dengan syntax-syntax yang ada apa phalcon,

Oke langsung saja kita mulai bereksperiment dengan phalcon,
Pertama, edit file router.php pada path app/config/ menjadi seperti ini, 
<?php

$router = $di->getRouter();

// Define your routes here
/**
 * Get user lists data by query
 */
$router->addGet(
    "/test",
    [
        "controller"        => "test",
        "action"            => "test"
    ]
);

$router->handle();

Selanjutnya, buat file TestController.php dan isikan code berikut,
<?php

use Phalcon\Forms\Element\Text;
use Phalcon\Forms\Form;

class TestController extends ControllerBase
{
    public function testAction()
    {
     $users = ['aan', 'hei', 'lala'];
     $genders = [
      'LK' => 'Laki-laki',
      'PR' => 'Perempuan'
     ];
        $data['users'] = $users;
        $data['genders'] = $genders;

        //play form phalcon, untuk lebih jelasnya akan dijelaskan pada bab crud
        $form = new Form();
        $name = new Text("name", array('placeholder' => 'Type your name'));
        $name->setLabel('Nama user');
        $form->add($name);
        // dd($data);
     $this->view->data = $data;
        $this->view->form = $form;
     $this->view->title = "Phalcon - User";
    }
}

Kemudian, buat file view test.volt pada path app/views/test/ dan isikan code berikut,
{% extends 'layouts/default1.volt' %}

{% block content %}
 <br>
 <div class="row">
  <div class="col-md-12">
   Hello codedoct!!!
   <br>
   users:
   {% if (data['users']) %}
    <ul>
     {% for user in data['users'] %}
      <li>{{user}}</li>
     {% endfor %}
    </ul>
   {% endif %}
  </div>
 </div>

 <div class="row">
  <div class="col-md-12">
   gender:
   <ul>
    {% for key, value in data['genders'] %}
     <li>{{value}}</li>
    {% endfor %}
   </ul>
  </div>
 </div>
 <br>
 <h5>Yang atas menggunakan form phalcon yang bawah menggunakan form biasa</h5>
 <div class="row">
  <div class="col-md-12">
   {{ form.label('name') }}
   {{ form.render('name', ['class':'form-control']) }}
   <br>
  </div>
 </div>
 <div class="row">
  <div class="col-md-12">
   <label>Nama user</label>
   <input type="text" name="name" class="form-control" placeholder="Type your name">
  </div> 
 </div>
 
{% endblock %}

Untuk mengetestnya buka url project phalcon kita dan arahkan pada route test, sehingga akan tampak seperti gambar dibawah ini,


Silahkan dipelajari sendiri syntax-syntaxnya, hehe..

===DONE!===

Phalcon - Add ENV and function dd


Pada tutorial kemarin kita sudah membuat koneksi database pada phalcon dan instalasi composer, tutorial kali ini kita akan menambahkan file .env dan instalasi debuger pada phalcon.

Oke, langsung saja kita mulai experimentnya.
Pertama, edit file config.php pada path app/config/ menjadi seperti ini,
<?php
/*
 * Modified: prepend directory path of current file, because of this file own different ENV under between Apache and command line.
 * NOTE: please remove this comment.
 */
defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');
// defined('BASE_URL');

if (!function_exists('env')) {
    /**
     * Load start
     */
    include_once APP_PATH . "/config/start.php";
}

return new \Phalcon\Config([
    'database' => [
        'adapter'     => 'Mysql',
        'host'        => env('DB_HOST'),
        'username'    => env('DB_USER'),
        'password'    => env('DB_PASS'),
        'dbname'      => env('DB_NAME'),
        'charset'     => 'utf8',
    ],
    'application' => [
        'appDir'         => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir'      => APP_PATH . '/models/',
        'migrationsDir'  => APP_PATH . '/migrations/',
        'viewsDir'       => APP_PATH . '/views/',
        'pluginsDir'     => APP_PATH . '/plugins/',
        'libraryDir'     => APP_PATH . '/library/',
        'cacheDir'       => BASE_PATH . '/cache/',

        // This allows the baseUri to be understand project paths that are not in the root directory
        // of the webpspace.  This will break if the public/index.php entry point is moved or
        // possibly if the web server rewrite rules are changed. This can also be set to a static path.
        'baseUri'        => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);

Setelah itu, edit file composer.json pada path root menjadi seperti ini,
{
 "name": "codedoct",
 "type": "project",
 "authors": [
        {
            "name": "Mihawk"
        }
    ],
 "require": {
  "guzzlehttp/guzzle": "~6.0"
 },
 "require-dev": {
        "symfony/var-dumper": "2.7.*",
        "vlucas/phpdotenv": "~2.0"
    }
}
Pada code composer diatas kita menbahkan plugin untuk env dan debuger.

Selanjutnya, buat file start.php pada path app/config/ dan isikan code berikut,
<?php
/**
 * Start loader configuration
 */

// Use composer autoloader to load vendor classes
require_once BASE_PATH . '/vendor/autoload.php';

/**
 * Environment variables
 */
$dotenv = new Dotenv\Dotenv(BASE_PATH . '/');
$dotenv->load();

/**
 * Include helpers
 */
include_once BASE_PATH . '/helpers.php';

/*
 * Debug
 */
if (env('APP_ENV') == 'dev') {
    $debug = new \Phalcon\Debug();
    $debug->listen();
}
Dapat dilihat dari code start diatas, kita menambahkan path vendor yang sudah kita build pada tutorial sebelumnya.

Kemudian buat file helpers.php pada path root dan isikan code berikut,
<?php

/**
 * Get .env value and return second parameter as default value
 */
function env($name, $default = null)
{
    return (getenv($name)) ?: $default;
}

/**
 * Current shortcode only available on dev env
 */
if (env('APP_ENV') == 'dev')
{
    /**
     * Simple function for better debugging view
     */
    class Dumper
    {
        /**
         * Dump a value with elegance.
         *
         * @param  mixed  $value
         * @return void
         */
        public function dump($value)
        {
            $dumper = 'cli' === PHP_SAPI ? new \Symfony\Component\VarDumper\Dumper\CliDumper : new \Symfony\Component\VarDumper\Dumper\HtmlDumper;
            $dumper->dump((new \Symfony\Component\VarDumper\Cloner\VarCloner)->cloneVar($value));
        }
    }

    if (!function_exists('dd')) {
        /**
         * Dump the passed variables and end the script.
         *
         * @param  mixed
         * @return void
         */
        function dd()
        {
            array_map(function ($x) {
                (new Dumper)->dump($x);
            }, func_get_args());
            die(1);
        }
    }
}
Dapat dilihat dari code helpers diatas kita menambahkan function dd yang akan digunakan untuk mendebug code.

Terakhir buat file .env pada path root dan isikan code berkut,
APP_ENV="dev"

DB_HOST="localhost"
DB_USER="root"
DB_PASS="root"
DB_NAME="phalcon-experiment_312"

Sehingga struktur file yang baru akan tampak seperti ini,


===DONE!===

Phalcon - Koneksi database dan add vendor


Pada tutorial kali ini kita akan melanjutkan project phalcon yang sebelumnya sudah sampai pada tutorial restruktur phalcon view.

Tutorial kali ini akan membahas tentang membuat koneksi database pada phalcon dan instalasi vendor, oke langsung saja kita mulai experimentnya.

Sebelum membuat koneksi database, buat databasenya terlebih dahulu pada phpmyadmin seperti pada tutorial berikut,

Jika database sudah dibuat, selanjutnya kita akan membuat koneksi database terlebih dahulu, caranya buka file config pada path /app/config/ dan edit bagian database menjadi seperti ini,
'database' => [
    'adapter'     => 'Mysql',
    'host'        => 'localhost',
    'username'    => 'root',
    'password'    => 'rahasia',
    'dbname'      => 'codedoct_phalcon',
    'charset'     => 'utf8',
],

Untuk mengetesnya buka terminal, masuk kedirectory project dan sesuaikan username, password, dan database name pada mysql  
$phalcon migration run

Sehingga akan muncul tampilan seperti pada gambar dbawah,


Jika muncul seperti pada gambar dibawah, berarti username atau password atau dbname salah di masukan.


Selanjutnya instalasi composer bisa lihat disini, jika sudah buat file composer.json pada project phalcon, dan isikan code berikut,
{
 "name": "codedoct",
 "type": "project",
 "authors": [
            {
               "name": "Mihawk"
            }
        ],
 "require": {
  "guzzlehttp/guzzle": "~6.0"
 }
}

Composer akan membuat folder baru bernama vendor dan file composer.lock sehingga akan tampak seperti gambar dibawah strukturnya,



===DONE!===