Memahami design pattern dalam OOP di PHP

Design pattern, apa sih itu? dalam kontek software engineering design pattern merupakan sebuah cara yang disepakati bersama oleh banyak orang sebagai cara terbaik tentang bagaimana  programmer bekerja dalam menyelesaikan masalah-masalah yang umumnya timbul ketika merancang aplikasi maupun sistem.

Design pattern, mengapa sih harus diikuti? ada banyak cara untuk men-struktur kode dalam sebuah project, dan kita dapat meletakkan arsitektur sesuka kita. Namun, mengikuti standard pola / pattern yang sudah banyak digunakan adalah sebuah hal yang baik. Karena hal tersebut akan membuat aplikasi dan kode yang kita buat mudah untuk dibaca, dipahami hingga dikembangkan oleh orang lain.

Selain memudahkan orang lain maupun diri sendiri dalam memahami perkerjaan kita, mengikuti design pattern yang telah ada merupakan suatu cara yang dapat ditempuh untuk memastikan bahwa aplikasi yang kita buat dikembangkan dengan paradigma yang telah teruji sehingga mengurangi waktu yang terbuang dalam melakukan trial and error.

Konsekwensi yang kita terima saat menggunakan paradigma atau design pattern yang tidak umum atau hasil buatan kita sendiri adalah saat kita stuck, mentok pada suatu kasus, dalam kondisi ini maka kita akan kesulitan dalam mencari jawaban dari orang lain karena paradigma yang kita gunakan tidak lazim, bilapun bertanya maka biasanya orang-orang malah akan menasehati kita untuk kembali menggunakan cara yang telah disepakati.

Sebagai developer tugas kita adalah menyelesaikan berbagai macam masalah. Banyak masalah yang kita hadapi sebenarnya sudah diselesaikan oleh orang lain dari sejak lama dengan solusi yang teruji dan dikembangkan bertahun-tahun, maka, untuk apa kita harus menyelesaikan masalah-masalah itu lagi?

Sebelum kita lanjutkan, kita harus pahami bersama bahwa tidak ada istilah cara paling baik, paling keren dll. kita harus bijak menentukan mana cara, paradigma yang sesuai dengan masalah yang ingin kita selesaikan.

Mari kita mulai!

Singleton

Singleton pattern berguna saat kita perlu memastikan bahwa kita hanya memiliki satu instance dari class untuk seluruh siklus hidup aplikasi. Hal ini biasanya terjadi ketika kita memiliki objek global seperti konfigurasi misalnya.

Comparison between the singleton design pattern and a conventional implementation.
Sumber dan contoh kode disini.

Factory Pattern

Factory Pattern secara sederhana  adalah proses membuat instance dari class dengan cara memanggil factory method tanpa melakukan instantiate secara langsung diberbagai tempat yang membutuhkan instance dari sebuah class.

Ada 2 kelebihan dalam membangun kode dengan cara seperti ini;

  1. Jika nanti kita ingin mengubah atau mengganti class kita dapat melakukannya dengan mudah hanya dengan cara mengubah class Factory, bukannya dengan mengganti semua kode yang tersebar untuk membuat object.
  2. Kelebihan kedua, jika membuat instance object tersebut sangat rumit, kita dapat melakukan pekerjaan rumit tersebut di dalam class factory, bukannya mengulang-ulang pekerjaan tersebut di setiap tempat.

    Screenshot.png
    Sumber disini.

Strategy

Sebelumnya pahami dulu contoh interface berikut juga bagaimana parameter sebuah function bisa diinisialisasi dengan tipe interface.

Screenshot.png
kode disini.

Fokus pada $apa->setHewan($gogok); fungsi ini di deklarasikan dengan  function setHewan(HewanInterface $hewan) tapi kita beri object $gogok kemudian.

Sudah paham interface diatas? maka lanjut ke sini:

Dengan strategy pattern, anda membungkus algoritma sejenis sehingga membuat class client bertanggung jawab untuk membuat instance dari sebuah algoritma spesifik tanpa perlu tahu implementasi sesungguhnya. Ada beberapa variasi strategy pattern, salah satunya yang paling simpel yaitu:

Kode pertama menunjukkan keluarga algoritma; untuk serialize array, json, atau array of data:

<?php

interface OutputInterface
{
    public function load();
}

class SerializedArrayOutput implements OutputInterface
{
    public function load()
    {
        return serialize($arrayOfData);
    }
}

class JsonStringOutput implements OutputInterface
{
    public function load()
    {
        return json_encode($arrayOfData);
    }
}

class ArrayOutput implements OutputInterface
{
    public function load()
    {
        return $arrayOfData;
    }
}

Dengan membungkus algoritma di atas Anda membuat itu bagus dan jelas dalam kode Anda bahwa pengembang lain dapat dengan mudah menambahkan jenis keluaran baru tanpa mempengaruhi kode klien.

Anda akan melihat bagaimana masing-masing ‘output’ konkret class mengimplementasikan OutputInterface – ini melayani dua tujuan, terutama itu memberikan kontrak sederhana yang harus dipatuhi oleh setiap implementasi beton baru. Kedua dengan menerapkan umum antarmuka Anda akan melihat di bagian berikutnya bahwa sekarang Anda dapat memanfaatkan [Type Hinting] (http://php.net/manual/en/language.oop5.typehinting.php) untuk memastikan bahwa klien yang memanfaatkan perilaku ini adalah jenis yang tepat dalam kasus ini ‘OutputInterface’.

Potongan kode yang berikutnya menguraikan bagaimana kelas client memanggil mungkin menggunakan salah satu algoritma ini dan bahkan lebih baik mengatur perilaku yang diperlukan pada saat runtime:

<?php

class SomeClient
{
    private $output;

    public function setOutput(OutputInterface $outputType)
    {
        $this->output = $outputType;
    }

    public function loadOutput()
    {
        return $this->output->load();
    }
}

Implementasi diatas manjadi:

<?php

$client = new SomeClient();

// Want an array?
$client->setOutput(new ArrayOutput());
$data = $client->loadOutput();

// Want some JSON?
$client->setOutput(new JsonStringOutput());
$data = $client->loadOutput();

Perusahaan – Perusahaan IT di Bandung – Indonesia 2018

Daftar Perusahaan IT yang sering membuka Lowongan Pekerjaan Programmer / Web Developer di Bandung – Indonesia

Tempat latihan olahraga  Beladiri Kickboxing, Sanda dan Muaythai : KBI Bandung

Loker: Link

Saat seseorang baru saja lulus dari program pendidikan IT yang di jalani (Kursus/Kuliah/SMK IT) maka kemungkinan terbesar selanjutnya adalah mencari Lowongan pekerjaan sebagai IT professional atau secara spesifik mencari Lowongan pekerjaan programmer professional, untuk mereka yang baru saja lulus dari program pendidikan IT yang mereka jalani mungkin belum begitu tau ada perusahaan Teknologi Informasi apa saja di Kota Bandung ini.

Jpeg
Yusuf’s workspace at Mitrais

Artikel ini saya buat untuk membantu mereka yang mencari apa saja perusahaan IT atau perusahaan yang bergerak dibidang teknologi dan sistem informasi yang sering membuka lowongan kerja / karir sebagai computer programmer di Bandung (PHP, Java, Rubu DevOps developer).

Info penting buat pencari kerja!

Buat temen-temen pekerja IT atau mahasiswa IT tingkat akhir yang sedang mencari kerja Loker IT, saya sangat menyarankan daftar dan menggunakan platform ini untuk mencari kerja yaitu Kalibrr, dengan applikasi  Kalibrr ini kamu akan lebih mudah ditemukan oleh pencari kerja.

Nah, untuk itu saya coba koleksikan dan kumpulkan daftar-daftar perusahaan IT / Teknologi informasi yang berada di Bandung, Perusahaan IT di Bandung ini sering membuka lowongan pekerjaan Programmer/IT Support untuk ditempatkan di kantor mereka yang berada di Bandung, walau tidak menutup kemungkinan untuk penempakan kota lainnya, Jakarta misalnya.

Dibawah ini adalah perusahaan – perusahaan yang begerak di bidang Teknologi Informasi yang berada di Bandung yang sering membuka lowongan programmer di Bandung :

  1. CV. Kurvasoft

    Jalan Mega Asri I No. 10 Bandung

    CV. Kurvasoft adalah perusahaan yang bergerak dalam bidang jasa konsultan Teknologi Informasi, Desktop – Web Application, Simulator Development, Computer Based Training , Web – Design Graphic, SMS Application, Network System, dan IT Outsource. Kami siap memberikan solusi IT bagi perusahaan anda.

  2. Bukalapak

  3. Dana

  4. HarukaEdu

  5. Docotel

  6. PT. Walden Global Service (link1, link2)

    • ONE OF THE LARGEST & MOST RELIABLE ENTERPRISE SOFTWARE SOLUTION COMPANY IN INDONESIA Our mission is to enable enterprises ride the wave of digital era, by delivering tech-enabled innovation and business process automation.
    • Cek berapa gaji di PT. WGS : Link Gaji
  7. Suitmedia (Div Mobile app nya di Bandung )

    • Suitmedia has become our second home where technology & creativity fused into digital chemistry
    • Cek berapa gaji di PT. Suitmedia : Link Gaji
  8. http://www.urbanindo.com/career

    • Founded in May 2011, UrbanIndo.com is an Indonesian property portal to connect property agents/sellers to property buyers and vice versa. UrbanIndo vision is to become the best property marketing in Indonesia
    • Cek berapa gaji di PT. Urbanindo : Link Gaji
  9. http://senja.co.uk/

    • Our crack team of web-developers, designers and IT experts stop at nothing to turn every project into a beautifully functioning online experience.
    • Cek berapa gaji di Senja dot co dot uk :Link Gaji
  10. www.inmagine.com/vacancy.php

    • As the world’s largest royalty-free stock image content provider, INMAGINE hosts the most complete Royalty-Free collection all under one roof. Offering over 30 million of the industry’s impeccable stock images curated from an ever increasing list of 130 prominent best selling collections, we empower you in the production of truly distinctive creative work that sets you apart from the competition.
    • Cek berapa gaji di PT. WGS :Link Gaji
  11. http://www.sense-labs.com/job-openings/

    • Cek berapa gaji di PT. Sense Lab :Link Gaji
  12. http://www.voxteneo.com/id/jobs/#job-indonesia

  13. http://hiyoto.com/ (Perusahaan Pabrik Cat, sering buka Loker Buat IT)

    • Cek berapa gaji di PT. Rajawali Hyoto :Link Gaji
  14. https://www.rotterdam-cs.com/bandung

    • Cek berapa gaji di PT. Rotterdam CS :Link Gaji
  15. PT. Sangkuriang 

  16. paseban.com

    • Cek berapa gaji di PASEBAN : Link Gaji
  17. Swamedia

    • Cek berapa gaji di PT. Swamedia : Link Gaji
  18. Dycode

    • Cek berapa gaji di PT. Dycode :Link Gaji
  19. NCI

    • Cek berapa gaji di PT. Nuansa Cerah Informasi Bandung :Link Gaji
  20. Mitrais 
    • Cek berapa gaji di PT. Mitrais : Link Gaji
  21. Vitraining

  22. Gits

    • Cek berapa gaji di GITS : Link Gaji
  23. PT.Selaras Multi Applikasi Global

    • Cek berapa gaji di PT. SMAG : Link Gaji
  24. AgateStudio

  25. 41Studio

  26. ENINDO

  27. Madani Integrator System (http://www.maintersys.com
    • Cek berapa gaji di PT. Maintersys : Link Gaji
  28. Sientifika Development (http://sientifikadev.com)
    • Cek berapa gaji di PT. Sientifika Dev : Link Gaji
  29. www.inzpiretechnology.com

    • Cek berapa gaji di PT. Inzpire : Link Gaji
  30. http://www.myinfosys.net/

    • Cek berapa gaji di PT. MyInfoSys  : Link Gaji
  31. www.bocistudio.com

    • Cek berapa gaji di PT. WGS : Link Gaji

  32. http://www.fgroupindonesia.com

    • Cek berapa gaji di PT. FGroupIndonesia : Link Gaji
  33. mediantarakreasindo.com

    • Cek berapa gaji di PT. Media Antara Kreasindo :Link Gaji
  34. Qwords.com

  35. Docotel Bandung

  36. http://qiwary.org/

    • Cek berapa gaji di PT. Qiwary :Link Gaji
  37. http://www.qiwary.net/

    • Cek berapa gaji di Qiwari :Link Gaji
  38. http://www.javan.co.id/

    • Cek berapa gaji di JAVAN :Link Gaji
  39. Ebizu Bandung

Ada yang mau menambahkan perusahaan IT lain di Bandung yang sering membuka loker untuk posisi Programmer di Bandung atau mau meng update data diatas bila ditemukan ada yang link perusahaan IT  sudah tidak valid ?

Semoga informasinya bermanfaat buat rekan-rekan programmer sekalian.

Berapa sih standar gaji Programmer di bandung atau di Jakarta : https://undebugable.wordpress.com/2011/09/26/standar-gaji-php-programmer-bandung/

Untuk Tips fresh graduate mencari kerja buka : https://undebugable.wordpress.com/2015/01/19/tips-untuk-mahasiswa-jurusan-it-tingkat-akhir/

Tags :

Hello World Dengan Symfony Console

Artikel sebelumnya untuk mensetup dan menkonfigurasi Komponen Symfony Konsol ada di artikel sebelumnya disini.

Buat src/Command/HelloWorld.php


vim app_console/src/Command/HelloWorld.php

Isi HelloWorld.php

[php]
<?php 
namespace Console\App\Command; 
use Symfony\Component\Console\Command\Command; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 

class HelloWorld extends Command {     
    // the name of the command (the part after "bin/console")     
    protected static $defaultName = 'hello-world';     
    public function __construct()     {          
         parent::__construct();     
    }
     
    protected function configure()     {         
        $this->setDescription('Ini adalah console untuk membuat hello world..')
        ->setHelp('Perintah ini akan mencetak hello world...');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("Hello world!");
    }
}

[/php]

Edit composer.json untuk autoloading

 {
     "require": {
         "symfony/console": "^4.2"
     },
     "autoload": {
          "psr-4": {
              "Console\\": "src"
          },
          "classmap": ["src"]
     }
 }

╭─yoesoff@yoesoff-ThinkPad-X220 ~/app_console ‹HelloWorld›
╰─➤ composer dump-autoload

Hasil akhir

Screenshot.png

Screenshot.png

Screenshot.png

Kode sumber disini, branch HelloWorld.

Console component

Pendahuluan

Symfony component console digunakan untuk membuat applikasi CLI yang indah dan tentunya dapat diuji (testable).

Symfony component console memungkinkan kita untuk membuat perintah dikonsol. Perintah konsol umumnya digunakan untuk mengerjakan tugas-tugas rutin, contohnya  cronjobs, impor, atau pekerjaan batch / konsol lainnya.

Sumber resmi

Instalasi Symfony Console

CATATAN

Jika Anda menginstal komponen ini di luar aplikasi Symfony, Anda harus require file vendor/autoload.php  dalam kode Anda untuk mengaktifkan mekanisme autoloading  yang disediakan oleh Composer. Baca artikel ini untuk lebih jelasnya.

╭─yoesoff@yoesoff-ThinkPad-X220 ~/belajar-symfony-component
╰─➤ mkdir app_console
╭─yoesoff@yoesoff-ThinkPad-X220 ~/belajar-symfony-component
╰─➤ cd app_console
╭─yoesoff@yoesoff-ThinkPad-X220 ~/belajar-symfony-component/app_console
╰─➤ composer require symfony/console
Using version ^4.2 for symfony/console
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing symfony/polyfill-mbstring (v1.10.0): Loading from cache
- Installing symfony/contracts (v1.0.1): Downloading (100%)
- Installing symfony/console (v4.2.0): Downloading (100%)
symfony/contracts suggests installing psr/cache (When using the Cache contracts)
symfony/contracts suggests installing psr/container (When using the Service contracts)
symfony/contracts suggests installing symfony/cache-contracts-implementation ()
symfony/contracts suggests installing symfony/service-contracts-implementation ()
symfony/contracts suggests installing symfony/translation-contracts-implementation ()
symfony/console suggests installing psr/log-implementation (For using the console logger)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing symfony/process ()
Writing lock file
Generating autoload files

Buat File Executable Console

╭─yoesoff@yoesoff-ThinkPad-X220 ~/app_console
╰─➤ ls
composer.json composer.lock vendor
╭─yoesoff@yoesoff-ThinkPad-X220 ~/app_console
╰─➤ mkdir bin/ &amp;amp;amp;&amp;amp;amp; touch bin/console
╭─yoesoff@yoesoff-ThinkPad-X220 ~/app_console
╰─➤ sudo chmod +x bin/console
╭─yoesoff@yoesoff-ThinkPad-X220 ~/app_console
╰─➤ ./bin/console
Console Tool

Usage:
command [options] [arguments]

Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
help Displays help for a command
list Lists commands

Isi file console ./bin/console

[php]
#!/usr/bin/env php 

<?php 

require __DIR__ . '/../vendor/autoload.php'; 

use Symfony\Component\Console\Application; 

$application = new Application(); 
$application->run();

?>;
[/php]
Screenshot.png
Applikasi Konsole dengan Symfony

 

 

Kode di sini

Installing ZSH and oh my zsh on Linux Mint 19 Tara

Install Zsh

Oh-My-Zsh is a framework for Zsh, the Z shell, so we need to first install Zsh on our system.

Zsh is a shell designed for interactive use, although it is also a powerful scripting language. More information can be found on the “Zsh Web Pages” sites.

Screenshot.png
sudo apt install zsh

Screenshot.png

Installing oh my zsh

Screenshot.png
sh -c “$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)”

Change oh my zsh Themes

Screenshot.png

Result

Screenshot.png

 

Cannot git push origin master -f (force)

Recently I just amend my code on branch master an then try to push the code to the Gitlab but unfortunately the branch master is protected for that particular action.


╭─yusuf@yusuf-berkarya ~/htdocs/xxxxxx-web ‹master›
╰─➤ git push origin master -f 1 ↵
Counting objects: 27, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (27/27), 3.95 KiB | 673.00 KiB/s, done.
Total 27 (delta 17), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To gitlab.com:xxxxxx/xxxxxx-web.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@gitlab.com:xxxxxx/xxxxxx-web.git'

I seems that the branch master is protected for push force, so here is the solution you can do temporarily (don’t forget to set it back later):

Go to following url:

https://gitlab.com/my_username/my_project-web/settings/repository#js-protected-branches-settings

Remove master branch from protected branch list:

Selection_031.png

 

That’s all, enjoy!

When you judge another, you do not define them, you define yourself – Wayne Dyer

Beautifully Zen

Lets face it, judging others is a natural human trait.   I try my hardest not to make assumptions about others, I really do,  but sometimes despite my best efforts I will find myself exploring feelings of negativity towards someone else or even making judgements about them.  On the flip side, I sometimes find myself on the receiving end of such perceptions and thoughts.

One thing I strongly believe is this,  every person we encounter in our lives, be it for a short or long period of time, has actually been sent our way to teach us something.   Even if we find this person challenging or so far away from how we view ourselves, they potentially may have arrived to teach us something valuable. One of the worlds most renowned Buddhist teachers Pema Chodron once said   “If we learn to open our hearts, anyone, including the people who…

View original post 1,005 more words

Bake a model for users table

Setup Database Connection

Edit config/app.php

Selection_018.png

Bake Model


root@b75c5d942521:/var/www# ./bin/cake bake model
Choose a model to bake from the following:
- Users
root@b75c5d942521:/var/www# ./bin/cake bake model Users
One moment while associations are detected.

Baking table class for Users...

Creating file /var/www/src/Model/Table/UsersTable.php
Wrote `/var/www/src/Model/Table/UsersTable.php`
Deleted `/var/www/src/Model/Table/empty`

Baking entity class for User...

Creating file /var/www/src/Model/Entity/User.php
Wrote `/var/www/src/Model/Entity/User.php`
Deleted `/var/www/src/Model/Entity/empty`

Baking test fixture for Users...

Creating file /var/www/tests/Fixture/UsersFixture.php
Wrote `/var/www/tests/Fixture/UsersFixture.php`
Deleted `/var/www/tests/Fixture/empty`
Bake is detecting possible fixtures...

Baking test case for App\Model\Table\UsersTable ...

Creating file /var/www/tests/TestCase/Model/Table/UsersTableTest.php
Wrote `/var/www/tests/TestCase/Model/Table/UsersTableTest.php`
root@b75c5d942521:/var/www#

Selection_019.png

source: https://book.cakephp.org/3.0/en/orm/database-basics.html#configuration

Test The model Using Console (REPL)

Selection_020.png

Insert new data

use Cake\ORM\TableRegistry;

$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->newEntity();

$article->title = 'A New Article';
$article->body = 'This is the body of the article';

if ($articlesTable->save($article)) {
    // The $article entity contains the id now
    $id = $article->id;
}

CakePHP 3.6.12 Migration (Phinx)

Phinx

Phinx is a standalone command line tool for managing database Migrations. The official Migrations plugin for CakePHP is based on this tool.

Composer Install Phinx (Mine is in the Docker Container)


root@b75c5d942521:/var/www# composer require robmorgan/phinx
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Using version ^0.10.6 for robmorgan/phinx
./composer.json has been updated
1/1: http://packagist.org/p/provider-latest$1c25e7d4b2021ab02c5f787753a04479e835647834fff24e816493dcb3b64a52.json
Finished: success: 1, skipped: 0, failure: 0, total: 1
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
&amp;gt; Cake\Composer\Installer\PluginInstaller::postAutoloadDump
root@b75c5d942521:/var/www# vendor/bin/phinx init
Phinx by CakePHP - https://phinx.org. 0.10.6

created /var/www/phinx.yml
root@b75c5d942521:/var/www# 

Phinx Init


root@b75c5d942521:/var/www# vendor/bin/phinx init
Phinx by CakePHP - https://phinx.org. 0.10.6

created /var/www/phinx.yml

www#

Setup Phinx’s  DB Connection


environment

. . .

  development:
    adapter: pgsql
    host: localhost
    name: cake1_db
    user: postgres
    pass: postgres
    port: 5432
    charset: utf8

. . .

Test Phinx’s DB Connection


root@b75c5d942521:/var/www# ./vendor/bin/phinx migrate -e development
Phinx by CakePHP - https://phinx.org. 0.10.6

using config file ./phinx.yml
using config parser yaml
using migration paths
using seed paths
using environment development
using adapter pgsql
using database cake1_db

All Done. Took 0.1185s

Create Migration File

root@b75c5d942521:/var/www# ./vendor/bin/phinx create CreateTableUser
Phinx by CakePHP - https://phinx.org. 0.10.6

Upps…

You probably used curly braces to define migration path in your Phinx configuration file, but no directories have been matched using this pattern
. You need to create a migration directory manually.

Selection_014.png

run ` mkdir -p db/migrations ` to create migration directory manually and solve the error.

Re-run Create Command


root@b75c5d942521:/var/www# ./vendor/bin/phinx create CreateTableUser
Phinx by CakePHP - https://phinx.org. 0.10.6

using config file ./phinx.yml
using config parser yaml
using migration paths
- /var/www/db/migrations
using seed paths
using migration base class Phinx\Migration\AbstractMigration
using default template
created db/migrations/20181002121753_create_table_user.php
root@b75c5d942521:/var/www# 

Selection_013.png

 

Edit 20181002121753_create_table_user.php

Selection_015.png

Selection_016.png
Changecreated_at and updated_at wirhcreated and modified so When a new entity is saved the created and modified fields will be set to the current time.

Selection_017.png

 

Find more about Phinx Here.

CakePhp 3.6 Installation on Ubuntu 18

My Laptop Environment


╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ php -v
PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.10-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies

╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ lsb_release --a
LSB Version: core-9.20170808ubuntu1-noarch:security-9.20170808ubuntu1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic

CakePHP 3.6 Instalation


╭─yusuf@yusuf-berkarya ~/htdocs
╰─➤ composer create-project --prefer-dist cakephp/app mycake1 127 ↵
Installing cakephp/app (3.6.5)
- Installing cakephp/app (3.6.5): Loading from cache
Created project in mycake1
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- cakephp/cakephp 3.6.9 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- cakephp/cakephp 3.6.8 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- cakephp/cakephp 3.6.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- cakephp/cakephp 3.6.6 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- cakephp/cakephp 3.6.5 requires ext-intl * -> the requested PHP extension intl is missing from your system.

Fix Error

PHP Fatal error: You must enable the intl extension to use CakePHP.
in /home/yusuf/htdocs/mycake1/config/requirements.php on line 31


╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ sudo apt-get install php7.2-intl

Re-run Install


╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 47 installs, 0 updates, 0 removals
- Installing cakephp/plugin-installer (1.1.0): Downloading (100%)
- Installing psr/http-message (1.0.1): Downloading (100%)
- Installing zendframework/zend-diactoros (1.8.6): Downloading (100%)
- Installing psr/log (1.0.2): Downloading (100%)
- Installing aura/intl (3.0.0): Downloading (100%)
- Installing cakephp/chronos (1.2.2): Downloading (100%)
- Installing cakephp/cakephp (3.6.12): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%)
- Installing symfony/yaml (v4.1.5): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%)
- Installing symfony/console (v4.1.5): Downloading (100%)
- Installing symfony/filesystem (v4.1.5): Downloading (100%)
- Installing symfony/config (v4.1.5): Downloading (100%)

Prepare app.php


╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ ./bin/cake
Could not load configuration file: /home/yusuf/htdocs/mycake1/config/app.php
╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ vim config/app.default.php
╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ cp config/app.default.php config/app.php
╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ ./bin/cake
No command provided. Choose one of the available commands.

Current Paths:

* app: src
* root: /home/yusuf/htdocs/mycake1
* core: /home/yusuf/htdocs/mycake1/vendor/cakephp/cakephp

Available Commands:

- bake
- benchmark
- cache
- compile
- completion
- console
- whitespace
- help
- i18n

Development Server


╭─yusuf@yusuf-berkarya ~/htdocs/mycake1
╰─➤ bin/cake server

Welcome to CakePHP v3.6.12 Console
---------------------------------------------------------------
App : src
Path: /home/yusuf/htdocs/mycake1/src/
DocumentRoot: /home/yusuf/htdocs/mycake1/webroot
Ini Path:
---------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`

Visit Web

http://localhost:8765/

Selection_012.png