SlideShare une entreprise Scribd logo
1  sur  89
Télécharger pour lire hors ligne
From Spaghetti to MVC
Hanafiah Yahya
Who is Hanafiah Yahya?
● Muhamad Hanafiah Bin Yahya
● Digital Immigrants generations
● Started programming, 1997 - MIRC script, VBA, Pascal,
● https://my.linkedin.com/in/hanafiahyahya
Our Awesome Programs
http://www.kreydle.com/academy/
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
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/
http://www.kreydle.com/internship/
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
Survey
1. Home many students/fresh graduate here?
2. Code in PHP?
3. Used MVC?
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
http://www.venicecafechicago.com/wp-content/uploads/2014/07/venicea01.jpg
Spaghetti
Why Spaghetti? - metaphor
Things get really messy when connecting each
other
back to the invention of
http://i144.photobucket.com/albums/r166/Funnyoldlife/tin-can-telephone.jpg
A
B
Spaghetti
A
B
C
Spaghetti
A
B
C
D
E
F
Spaghetti
A
B
C
D
E
F
G
H
I
J
Spaghetti
A
B
C
D
E
F
G
H
I
J
Formula
# Phones # Lines/ Connections
2 1
3 3
4 6
5 10
10 45
20 190
1000 ?
Formula
# Phones # Lines
10 45
20 190
1000 499,500
Formula
#Lines = ( p * ( p - 1 ) ) / 2
*p = phone
Where is my server?
Spaghetti Code
1) 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 ] )
Solution?
Solution? better design pattern
HUB
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
MVC
Heroes
http://www.helenbrowngroup.com/wp-content/uploads/2014/09/info-pro-as-superman.jpg
Enough Theory!
Lets see some code
SQL Query
DB Connection
SQL Query
HTML Code
Business Logic
Presentation
Presentation
Spaghetti Code
http://masterphp.local/spaghetti/
https://github.
com/hanafiah/masterphp/tree/master/spaghetti
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
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
History
1979?.. so old
Made popular by Ruby On Rails
initial release on 2005 and
adapted by PHP community
https://upload.wikimedia.org/...n_Rails.svg.png
Why MVC?
● Organized & structured
● Separation of code
● loose coupling
● Easy code maintenance
● Reusable code. DRY - Don’t Repeat
Yourself
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Model
View Controller
User
Uses
ManipulateUpdates
Sees
- Represent Knowledge
- Manages data, logic and rules of the application.
- Business Logic
Model
View Controller
User
Uses
ManipulateUpdates
Sees
- The output, whats user see.
- Visual represent of the Model
- Presentation layer
Model
View Controller
User
Uses
ManipulateUpdates
Sees
the middleman / link between user and
the system
Model
View Controller
User
Uses
ManipulateUpdates
Sees
The flow
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
http://www.makemark.co.uk/wp-content/uploads/2011/05/infooverload_full.jpg
PHP MVC Frameworks
1. CodeIgniter
2. Laravel
3. Symfony
4. CakePHP
5. FuelPHP
6. YII
7. … more
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
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 …?
Why CodeIgniter
Because you’ve gotta pick one
That being said, CI is
not dead!
● easy to understand
● simple, doesn't require advance OOP
● quick to get up and running
● good docs
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
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Model
View Controller
User
Uses
ManipulateUpdates
Sees
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
Config - database
application/config/database.php
$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);
Config - autoload
application/config/autoload.php
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
Model
View Controller
User
Uses
ManipulateUpdates
Sees
http://www.codeigniter.com/user_guide/general/models.html
Models
application/models/m_users.php
<?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
<?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
<?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
<?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
Model
github repo
https://github.
com/hanafiah/masterphp/blob/master/mvc/application/mod
els/m_users.php
https://github.
com/hanafiah/masterphp/tree/master/spaghetti
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
http://www.makemark.co.uk/wp-content/uploads/2011/05/infooverload_full.jpg
Model
View Controller
User
Uses
ManipulateUpdates
Sees
http://www.codeigniter.com/user_guide/general/views.html
3 View files
application/views/*
<?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
View
github repo
https://github.
com/hanafiah/masterphp/tree/master/mvc/application/views
https://github.
com/hanafiah/masterphp/tree/master/spaghetti
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
Model
View Controller
User
Uses
ManipulateUpdates
Sees
http://www.codeigniter.com/user_guide/general/controllers.html
Controller
A Controller is simply a class file that is named
in a way that can be associated with a URI.
Relation with url
http://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);
}
Relation with url
http://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);
}
Relation with url
http://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);
}
Relation with url
http://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);
}
application/controllers/*
Controller
git repo
https://github.
com/hanafiah/masterphp/blob/master/mvc/application/contr
ollers/users.php
Topics
1. Spaghetti Code
2. MVC introduction
3. PHP MVC frameworks
4. Working with CodeIgniter
5. Config
6. Model
7. View
8. Controller
9. Continue your journey
pretty url
http://masterphp.local/mvc/index.php/users/edit/2
http://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]
pretty url
http://masterphp.local/mvc/index.php/users/edit/2
http://masterphp.local/mvc/users/edit/2
2. edit config file and delete index.php
applications/config/config.php
<?php
$config['index_page'] = 'index.php';
become
$config['index_page'] = '';
Continue your journey
1. Library - the classes
2. Helpers - set of functions eg: url, {
base_url(), site_url(), anchor() }
3. Database Classes & Helper
4. Custom URL Routing
5. more..
http://suttonschoolswork.co.uk/wp-content/uploads/2014/10/questionmark.jpg
https://www.facebook.com/kreydle
Thank You
Slide
https://goo.gl/dzfn0D
repo
https://github.com/hanafiah/masterphp
https://www.facebook.com/hanafiah.yahya
hanafiah@kreydle.com

Contenu connexe

Tendances

Streamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web FrameworksStreamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web Frameworksguestf7bc30
 
AngularJS for Legacy Apps
AngularJS for Legacy AppsAngularJS for Legacy Apps
AngularJS for Legacy AppsPeter Drinnan
 
Javascript MVVM with Vue.JS
Javascript MVVM with Vue.JSJavascript MVVM with Vue.JS
Javascript MVVM with Vue.JSEueung Mulyana
 
How to Build ToDo App with Vue 3 + TypeScript
How to Build ToDo App with Vue 3 + TypeScriptHow to Build ToDo App with Vue 3 + TypeScript
How to Build ToDo App with Vue 3 + TypeScriptKaty Slemon
 
AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)Gary Arora
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web ComponentsAndrew Rota
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsHolly Schinsky
 
JavaScript DOM - Dynamic interactive Code
JavaScript DOM - Dynamic interactive CodeJavaScript DOM - Dynamic interactive Code
JavaScript DOM - Dynamic interactive CodeLaurence Svekis ✔
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testingVladimir Roudakov
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSPablo Godel
 
Monster JavaScript Course - 50+ projects and applications
Monster JavaScript Course - 50+ projects and applicationsMonster JavaScript Course - 50+ projects and applications
Monster JavaScript Course - 50+ projects and applicationsLaurence Svekis ✔
 
Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Stéphane Bégaudeau
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)Nicholas Zakas
 
AngularJS best-practices
AngularJS best-practicesAngularJS best-practices
AngularJS best-practicesHenry Tao
 
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...Katy Slemon
 

Tendances (20)

Streamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web FrameworksStreamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web Frameworks
 
AngularJS for Legacy Apps
AngularJS for Legacy AppsAngularJS for Legacy Apps
AngularJS for Legacy Apps
 
Javascript MVVM with Vue.JS
Javascript MVVM with Vue.JSJavascript MVVM with Vue.JS
Javascript MVVM with Vue.JS
 
How to Build ToDo App with Vue 3 + TypeScript
How to Build ToDo App with Vue 3 + TypeScriptHow to Build ToDo App with Vue 3 + TypeScript
How to Build ToDo App with Vue 3 + TypeScript
 
Angularjs
AngularjsAngularjs
Angularjs
 
AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web Components
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.js
 
Webpack
Webpack Webpack
Webpack
 
JavaScript DOM - Dynamic interactive Code
JavaScript DOM - Dynamic interactive CodeJavaScript DOM - Dynamic interactive Code
JavaScript DOM - Dynamic interactive Code
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
 
Monster JavaScript Course - 50+ projects and applications
Monster JavaScript Course - 50+ projects and applicationsMonster JavaScript Course - 50+ projects and applications
Monster JavaScript Course - 50+ projects and applications
 
Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)
 
Asp net-mvc-3 tier
Asp net-mvc-3 tierAsp net-mvc-3 tier
Asp net-mvc-3 tier
 
AngularJS best-practices
AngularJS best-practicesAngularJS best-practices
AngularJS best-practices
 
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
 
Angular js
Angular jsAngular js
Angular js
 
Vue.js for beginners
Vue.js for beginnersVue.js for beginners
Vue.js for beginners
 

En vedette

Zend Framework Form: Mastering Decorators
Zend Framework Form: Mastering DecoratorsZend Framework Form: Mastering Decorators
Zend Framework Form: Mastering DecoratorsNick Belhomme
 
Rasmus, Think Again! Agile Framework == Happy Php Developer
Rasmus, Think Again! Agile Framework == Happy Php DeveloperRasmus, Think Again! Agile Framework == Happy Php Developer
Rasmus, Think Again! Agile Framework == Happy Php DeveloperArno Schneider
 
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVM
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVMPerformance Comparison of PHP 5.6 vs. 7.0 vs HHVM
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVMJani Tarvainen
 
How to stop writing spaghetti code
How to stop writing spaghetti codeHow to stop writing spaghetti code
How to stop writing spaghetti codeTom Croucher
 
Logic Formulation 3
Logic Formulation 3Logic Formulation 3
Logic Formulation 3deathful
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"Sabin Buraga
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonightDamien Seguy
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js선협 이
 

En vedette (13)

Spaghetti Code vs MVC
Spaghetti Code vs MVCSpaghetti Code vs MVC
Spaghetti Code vs MVC
 
Herding cats
Herding catsHerding cats
Herding cats
 
Zend Framework Form: Mastering Decorators
Zend Framework Form: Mastering DecoratorsZend Framework Form: Mastering Decorators
Zend Framework Form: Mastering Decorators
 
Rasmus, Think Again! Agile Framework == Happy Php Developer
Rasmus, Think Again! Agile Framework == Happy Php DeveloperRasmus, Think Again! Agile Framework == Happy Php Developer
Rasmus, Think Again! Agile Framework == Happy Php Developer
 
Zend Framework MVC driven ExtJS
Zend Framework MVC driven ExtJSZend Framework MVC driven ExtJS
Zend Framework MVC driven ExtJS
 
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVM
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVMPerformance Comparison of PHP 5.6 vs. 7.0 vs HHVM
Performance Comparison of PHP 5.6 vs. 7.0 vs HHVM
 
How to stop writing spaghetti code
How to stop writing spaghetti codeHow to stop writing spaghetti code
How to stop writing spaghetti code
 
Logic Formulation 3
Logic Formulation 3Logic Formulation 3
Logic Formulation 3
 
Clean code
Clean codeClean code
Clean code
 
From * to Symfony2
From * to Symfony2From * to Symfony2
From * to Symfony2
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonight
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
 

Similaire à Introduction to Using PHP & MVC Frameworks

Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principlesEdorian
 
Php mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanPhp mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanphp2ranjan
 
php training in hyderabad
php training in hyderabadphp training in hyderabad
php training in hyderabadphp2ranjan
 
PHP Lab template for lecturer log book- and syllabus
PHP Lab template for lecturer log book- and syllabusPHP Lab template for lecturer log book- and syllabus
PHP Lab template for lecturer log book- and syllabusKavithaK23
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupalwebbywe
 
BITM3730Week11.pptx
BITM3730Week11.pptxBITM3730Week11.pptx
BITM3730Week11.pptxMattMarino13
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress DevelopmentAdam Tomat
 
WordCamp LA 2014- Writing Code that Scales
WordCamp LA 2014-  Writing Code that ScalesWordCamp LA 2014-  Writing Code that Scales
WordCamp LA 2014- Writing Code that ScalesSpectrOMTech.com
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in DjangoLakshman Prasad
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-publicChul Ju Hong
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatternsChul Ju Hong
 
Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Jacek Tomaszewski
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroSteven Pignataro
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesShabir Ahmad
 
Spunite17 Converting your CEWP Customisations
Spunite17 Converting your CEWP CustomisationsSpunite17 Converting your CEWP Customisations
Spunite17 Converting your CEWP CustomisationsNCCOMMS
 

Similaire à Introduction to Using PHP & MVC Frameworks (20)

Becoming A Php Ninja
Becoming A Php NinjaBecoming A Php Ninja
Becoming A Php Ninja
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
 
Php mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanPhp mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjan
 
php training in hyderabad
php training in hyderabadphp training in hyderabad
php training in hyderabad
 
PHP Lab template for lecturer log book- and syllabus
PHP Lab template for lecturer log book- and syllabusPHP Lab template for lecturer log book- and syllabus
PHP Lab template for lecturer log book- and syllabus
 
Going web native
Going web nativeGoing web native
Going web native
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupal
 
BITM3730Week11.pptx
BITM3730Week11.pptxBITM3730Week11.pptx
BITM3730Week11.pptx
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development
 
WordCamp LA 2014- Writing Code that Scales
WordCamp LA 2014-  Writing Code that ScalesWordCamp LA 2014-  Writing Code that Scales
WordCamp LA 2014- Writing Code that Scales
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in Django
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
 
Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1
 
React django
React djangoReact django
React django
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
Spunite17 Converting your CEWP Customisations
Spunite17 Converting your CEWP CustomisationsSpunite17 Converting your CEWP Customisations
Spunite17 Converting your CEWP Customisations
 

Plus de Gerald Krishnan

Deploy your web app to aws
Deploy your web app to awsDeploy your web app to aws
Deploy your web app to awsGerald Krishnan
 
Ways to power up your brain
Ways to power up your brainWays to power up your brain
Ways to power up your brainGerald Krishnan
 
Indonesia Unique Public Transportation
Indonesia Unique Public TransportationIndonesia Unique Public Transportation
Indonesia Unique Public TransportationGerald Krishnan
 
How to Create a Home Studio
How to Create a Home StudioHow to Create a Home Studio
How to Create a Home StudioGerald Krishnan
 
Successful People Vs Unsuccessful People
Successful People Vs Unsuccessful PeopleSuccessful People Vs Unsuccessful People
Successful People Vs Unsuccessful PeopleGerald Krishnan
 
2015 IT Internship Program at Kreydle
2015 IT Internship Program at Kreydle2015 IT Internship Program at Kreydle
2015 IT Internship Program at KreydleGerald Krishnan
 
Email Marketing Basics - How Email Marketing Works!
Email Marketing Basics - How Email Marketing Works!Email Marketing Basics - How Email Marketing Works!
Email Marketing Basics - How Email Marketing Works!Gerald Krishnan
 
Internship Program Presentation at Kreydle
Internship Program Presentation at KreydleInternship Program Presentation at Kreydle
Internship Program Presentation at KreydleGerald Krishnan
 

Plus de Gerald Krishnan (10)

Deploy your web app to aws
Deploy your web app to awsDeploy your web app to aws
Deploy your web app to aws
 
12 desk exercise
12 desk exercise 12 desk exercise
12 desk exercise
 
Ways to power up your brain
Ways to power up your brainWays to power up your brain
Ways to power up your brain
 
Indonesia Unique Public Transportation
Indonesia Unique Public TransportationIndonesia Unique Public Transportation
Indonesia Unique Public Transportation
 
How to Create a Home Studio
How to Create a Home StudioHow to Create a Home Studio
How to Create a Home Studio
 
Successful People Vs Unsuccessful People
Successful People Vs Unsuccessful PeopleSuccessful People Vs Unsuccessful People
Successful People Vs Unsuccessful People
 
Blood type personality
Blood type personalityBlood type personality
Blood type personality
 
2015 IT Internship Program at Kreydle
2015 IT Internship Program at Kreydle2015 IT Internship Program at Kreydle
2015 IT Internship Program at Kreydle
 
Email Marketing Basics - How Email Marketing Works!
Email Marketing Basics - How Email Marketing Works!Email Marketing Basics - How Email Marketing Works!
Email Marketing Basics - How Email Marketing Works!
 
Internship Program Presentation at Kreydle
Internship Program Presentation at KreydleInternship Program Presentation at Kreydle
Internship Program Presentation at Kreydle
 

Dernier

Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 

Dernier (20)

Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 

Introduction to Using PHP & MVC Frameworks