introduction to using php & mvc frameworks

89
From Spaghetti to MVC Hanafiah Yahya

Upload: gobala-krishnan

Post on 10-Jan-2017

998 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Introduction to Using PHP & MVC Frameworks

From Spaghetti to MVCHanafiah Yahya

Page 2: Introduction to Using PHP & MVC Frameworks

Who is Hanafiah Yahya?● Muhamad Hanafiah Bin Yahya● Digital Immigrants generations● Started programming, 1997 - MIRC script, VBA, Pascal, ● https://my.linkedin.com/in/hanafiahyahya

Page 3: Introduction to Using PHP & MVC Frameworks

Our Awesome Programs

Page 5: Introduction to Using PHP & MVC Frameworks

Kreydle Academy

● CSR - Corporate social responsibility● Non profit initiative…● We contribute back to community● Helping Graduates Gain the competitive

edge● fill in the gap between university and what

industry really want● Its free for student

Page 6: Introduction to Using PHP & MVC Frameworks

Kreydle Academy

● Want to contribute?● Help us spread the word. share with your

friends on twitter, facebook, blog and any medium that you have

● or Join us as guest speaker

http://www.kreydle.com/academy/

Page 8: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 9: Introduction to Using PHP & MVC Frameworks

Survey

1. Home many students/fresh graduate here?2. Code in PHP?3. Used MVC?

Page 10: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 11: Introduction to Using PHP & MVC Frameworks

http://www.venicecafechicago.com/wp-content/uploads/2014/07/venicea01.jpg

Spaghetti

Page 12: Introduction to Using PHP & MVC Frameworks

Why Spaghetti? - metaphor

Things get really messy when connecting each other

Page 13: Introduction to Using PHP & MVC Frameworks

back to the invention of

http://i144.photobucket.com/albums/r166/Funnyoldlife/tin-can-telephone.jpg

A

B

Page 14: Introduction to Using PHP & MVC Frameworks

Spaghetti

A

B

C

Page 15: Introduction to Using PHP & MVC Frameworks

Spaghetti

A

B

C

D

E

F

Page 16: Introduction to Using PHP & MVC Frameworks

Spaghetti

A

B

C

D

E

F

G

H

I

J

Page 17: Introduction to Using PHP & MVC Frameworks

Spaghetti

A

B

C

D

E

F

G

H

I

J

Page 18: Introduction to Using PHP & MVC Frameworks

Formula# Phones # Lines/ Connections

2 1

3 3

4 6

5 10

10 45

20 190

1000 ?

Page 19: Introduction to Using PHP & MVC Frameworks

Formula# Phones # Lines

10 45

20 190

1000 499,500

Formula#Lines = ( p * ( p - 1 ) ) / 2

*p = phone

Page 20: Introduction to Using PHP & MVC Frameworks

Where is my server?

Page 21: Introduction to Using PHP & MVC Frameworks

Spaghetti Code1) Spaghetti code is a specific [ goto 8 ]2) written in order, but splattered [ goto 9 ]3) allowed to jump to a specific [ goto 7 ]4) the goto statement, which [ goto 3 ]5) a set of instructions is not [ goto 2 ]6) spaghetti. It often refers to [ goto 4 ]7) line of code. [ end ]8) kind of bad coding, where [ goto 5 ]9) all over the place ( like a knotted [ goto 6 ] )

Page 22: Introduction to Using PHP & MVC Frameworks

Solution?

Page 23: Introduction to Using PHP & MVC Frameworks

Solution? better design pattern

HUB

Page 24: Introduction to Using PHP & MVC Frameworks

Result

# Phones # Lines

2 1

3 3

4 6

5 10

10 45

20 190

1000 499,500

# Phones # Lines

2 2

3 3

4 4

5 5

10 10

20 20

1000 1000

Original Refactor

Page 25: Introduction to Using PHP & MVC Frameworks

MVC Heroes

http://www.helenbrowngroup.com/wp-content/uploads/2014/09/info-pro-as-superman.jpg

Page 26: Introduction to Using PHP & MVC Frameworks

Enough Theory!

Lets see some code

Page 27: Introduction to Using PHP & MVC Frameworks
Page 28: Introduction to Using PHP & MVC Frameworks
Page 29: Introduction to Using PHP & MVC Frameworks

SQL Query

DB Connection

Page 30: Introduction to Using PHP & MVC Frameworks

SQL Query

HTML Code

Page 31: Introduction to Using PHP & MVC Frameworks

Business Logic

Presentation

Presentation

Page 33: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 34: Introduction to Using PHP & MVC Frameworks

History

Invented in 1979 by Smalltalk programmers, Trygve Reenskaug

It is software design pattern

http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

Page 35: Introduction to Using PHP & MVC Frameworks

History

1979?.. so old

Made popular by Ruby On Railsinitial release on 2005 and adapted by PHP community

https://upload.wikimedia.org/...n_Rails.svg.png

Page 36: Introduction to Using PHP & MVC Frameworks

Why MVC?

● Organized & structured● Separation of code● loose coupling● Easy code maintenance● Reusable code. DRY - Don’t Repeat

Yourself

Page 37: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 38: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

- Represent Knowledge- Manages data, logic and rules of the application. - Business Logic

Page 39: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

- The output, whats user see.- Visual represent of the Model- Presentation layer

Page 40: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

the middleman / link between user and the system

Page 41: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

The flow

Page 42: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 43: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 44: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 45: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 46: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 47: Introduction to Using PHP & MVC Frameworks

http://www.makemark.co.uk/wp-content/uploads/2011/05/infooverload_full.jpg

Page 48: Introduction to Using PHP & MVC Frameworks

PHP MVC Frameworks

1. CodeIgniter 2. Laravel3. Symfony4. CakePHP5. FuelPHP6. YII7. … more

Page 49: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 50: Introduction to Using PHP & MVC Frameworks

Why CodeIgniter

Why not CakePHP or Laravel or Symfony or FuelPHP or YII or Zend Framework or Kohana or Zoop or Akelos or PHP on Trax or Prado or Seagull or …?

Page 51: Introduction to Using PHP & MVC Frameworks

Why CodeIgniter

Because you’ve gotta pick one

Page 52: Introduction to Using PHP & MVC Frameworks

That being said, CI is

not dead!● easy to understand● simple, doesn't require advance OOP● quick to get up and running● good docs

Page 53: Introduction to Using PHP & MVC Frameworks

CodeIgniter is a powerful PHP framework with a very small footprint, built for developers who need a simple and elegant toolkit to create full-featured web applications.

CodeIgniter

http://www.codeigniter.com

Page 54: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 55: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

Page 56: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 57: Introduction to Using PHP & MVC Frameworks

Config - database

application/config/database.php

Page 58: Introduction to Using PHP & MVC Frameworks

$db['default'] = array('dsn' => '','hostname' => 'localhost','username' => 'root','password' => '','database' => ‘master_php’,'dbdriver' => 'mysqli','dbprefix' => '','pconnect' => FALSE,'db_debug' => TRUE,'cache_on' => FALSE,'cachedir' => '','char_set' => 'utf8','dbcollat' => 'utf8_general_ci','swap_pre' => '','encrypt' => FALSE,'compress' => FALSE,'stricton' => FALSE,'failover' => array(),'save_queries' => TRUE

);

http://www.codeigniter.com/user_guide/database/configuration.html

<?php$host = 'localhost';$dbname = 'master_php';$user = 'root';$pass = '';

try { // Connecting to MySQL $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

Page 59: Introduction to Using PHP & MVC Frameworks

Config - autoload

application/config/autoload.php

Page 60: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 61: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

http://www.codeigniter.com/user_guide/general/models.html

Page 62: Introduction to Using PHP & MVC Frameworks

Models

application/models/m_users.php

Page 63: Introduction to Using PHP & MVC Frameworks

<?php

public function get_users()

{

$query = $this->db->get('users');

return $query->result();

}

<?php

// Get all users

$stmt = $dbh->prepare("SELECT * FROM users");

$stmt->setFetchMode(PDO::FETCH_ASSOC);

if ($stmt->execute()) {

while ($row = $stmt->fetch()) {

Model - Get all users

Page 64: Introduction to Using PHP & MVC Frameworks

<?php

public function insert()

{

$this->name = $this->input->post('name'); //

similar to $_POST['name'];

$this->age = $this->input->post('age');

$this->email = $this->input->post('email');

$this->db->insert('users', $this);

}

<?php

$stmt = $dbh->prepare("INSERT INTO users ( name,

age, email ) values ( :name, :age, :email )");

$stmt->bindParam(':name', $name, PDO::PARAM_STR);

$stmt->bindParam(':age', $age, PDO::PARAM_INT);

$stmt->bindParam(':email', $email, PDO::PARAM_STR);

$name = $_POST['name'];

$age = $_POST['age'];

$email = $_POST['email'];

$stmt->execute();

Model - Add new user

Page 65: Introduction to Using PHP & MVC Frameworks

<?php

public function update()

{

$this->name = $this->input->post('name'); //

similar to $_POST['name'];

$this->age = $this->input->post('age');

$this->email = $this->input->post('email');

$this->db->update('users', $this, array('id' =>

$this->input->post('id')));

}

<?php

$stmt = $dbh->prepare("UPDATE users SET name = :

name, age = :age, email = :email WHERE id = :id");

$stmt->bindParam(':name', $name, PDO::PARAM_STR);

$stmt->bindParam(':age', $age, PDO::PARAM_INT);

$stmt->bindParam(':email', $email, PDO::PARAM_STR);

$stmt->bindParam(':id', $id, PDO::PARAM_INT);

$name = $_POST['name'];

$age = $_POST['age'];

$email = $_POST['email'];

$id = $_POST['id'];

$stmt->execute();

Model - Edit user

Page 66: Introduction to Using PHP & MVC Frameworks

<?php

public function delete($id = FALSE)

{

$this->db->delete('users', array('id' => $id));

}

<?php

$stmt = $dbh->prepare("DELETE FROM users WHERE id =

:id LIMIT 1");

$stmt->bindParam(':id', $id, PDO::PARAM_STR);

$id = $_GET['delete'];

$stmt->execute();

Model - Delete user

Page 68: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 69: Introduction to Using PHP & MVC Frameworks

http://www.makemark.co.uk/wp-content/uploads/2011/05/infooverload_full.jpg

Page 70: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

http://www.codeigniter.com/user_guide/general/views.html

Page 71: Introduction to Using PHP & MVC Frameworks

3 View files

application/views/*

Page 72: Introduction to Using PHP & MVC Frameworks

<?php

foreach ($users as $user) {

?>

<tr>

<td><?php echo $user->id; ?></td>

<td><?php echo $user->name; ?></td>

<td><?php echo $user->age; ?></td>

<td><?php echo $user->email; ?></td>

<td>

...

<?php

// Get all users

$stmt = $dbh->prepare("SELECT * FROM users");

$stmt->setFetchMode(PDO::FETCH_ASSOC);

if ($stmt->execute()) {

while ($row = $stmt->fetch()) {

?>

<tr>

<td><?php echo $row['id']; ?></td>

<td><?php echo $row['name']; ?></td>

<td><?php echo $row['age']; ?></td>

<td><?php echo $row['email']; ?></td>

<td>

...

Views - listing

Page 74: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 75: Introduction to Using PHP & MVC Frameworks

Model

View Controller

User

Uses

ManipulateUpdates

Sees

http://www.codeigniter.com/user_guide/general/controllers.html

Page 76: Introduction to Using PHP & MVC Frameworks

Controller

A Controller is simply a class file that is named in a way that can be associated with a URI.

Page 77: Introduction to Using PHP & MVC Frameworks

Relation with urlhttp://example.com/index.php/CLASS/METHOD/PARAM

http://masterphp.local/mvc/index.php/users/edit/2

<?php

class Users extends CI_Controller {

public function edit($id=FALSE)

{

if (isset($_POST['btnEdit'])) {

$this->m_users->update();

redirect('users');

}

$this->view_data['user'] = $this->m_users->get_user($id);

$this->load->view('v_edit_user', $this->view_data);

}

Page 78: Introduction to Using PHP & MVC Frameworks

Relation with urlhttp://example.com/index.php/CLASS/METHOD/PARAM

http://masterphp.local/mvc/index.php/users/edit/2

<?php

class Users extends CI_Controller {

public function edit($id=FALSE)

{

if (isset($_POST['btnEdit'])) {

$this->m_users->update();

redirect('users');

}

$this->view_data['user'] = $this->m_users->get_user($id);

$this->load->view('v_edit_user', $this->view_data);

}

Page 79: Introduction to Using PHP & MVC Frameworks

Relation with urlhttp://example.com/index.php/CLASS/METHOD/PARAM

http://masterphp.local/mvc/index.php/users/edit/2

<?php

class Users extends CI_Controller {

public function edit($id=FALSE)

{

if (isset($_POST['btnEdit'])) {

$this->m_users->update();

redirect('users');

}

$this->view_data['user'] = $this->m_users->get_user($id);

$this->load->view('v_edit_user', $this->view_data);

}

Page 80: Introduction to Using PHP & MVC Frameworks

Relation with urlhttp://example.com/index.php/CLASS/METHOD/PARAM1/PARAM2

http://masterphp.local/mvc/index.php/users/edit/2/3

<?php

class Users extends CI_Controller {

public function edit($id=FALSE, $param = ‘’)

{

if (isset($_POST['btnEdit'])) {

$this->m_users->update();

redirect('users');

}

$this->view_data['user'] = $this->m_users->get_user($id);

$this->load->view('v_edit_user', $this->view_data);

}

Page 81: Introduction to Using PHP & MVC Frameworks

application/controllers/*

Page 83: Introduction to Using PHP & MVC Frameworks

Topics1. Spaghetti Code2. MVC introduction3. PHP MVC frameworks4. Working with CodeIgniter5. Config6. Model7. View8. Controller9. Continue your journey

Page 84: Introduction to Using PHP & MVC Frameworks

pretty urlhttp://masterphp.local/mvc/index.php/users/edit/2http://masterphp.local/mvc/users/edit/2

1. add .htaccess to root directory/applications/index.php/.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]

Page 85: Introduction to Using PHP & MVC Frameworks

pretty urlhttp://masterphp.local/mvc/index.php/users/edit/2http://masterphp.local/mvc/users/edit/2

2. edit config file and delete index.phpapplications/config/config.php

<?php

$config['index_page'] = 'index.php';

become

$config['index_page'] = '';

Page 87: Introduction to Using PHP & MVC Frameworks

http://suttonschoolswork.co.uk/wp-content/uploads/2014/10/questionmark.jpg