28
FINDOLOGIC GMBH GEORG M. SORST [email protected] There are plenty of other frameworks in the sea - PHP + Symfony WebDev Meetup 20.11.2013

Salzburg WebDev Meetup PHP Symfony

Embed Size (px)

DESCRIPTION

A short introduction to PHP and Symfony

Citation preview

Page 1: Salzburg WebDev Meetup PHP Symfony

FINDOLOGIC GMBHGEORG M. [email protected]

There are plenty of other frameworks in the sea -PHP + Symfony

WebDev Meetup 20.11.2013

Page 2: Salzburg WebDev Meetup PHP Symfony

FINDOLOGIC

◼ Search for online stores◼ >100M queries / month◼ A dozen servers◼ One of Salzburg’s most successful

start-ups

Page 3: Salzburg WebDev Meetup PHP Symfony

Business

Page 4: Salzburg WebDev Meetup PHP Symfony

LAN

Page 5: Salzburg WebDev Meetup PHP Symfony

BBQ

Page 6: Salzburg WebDev Meetup PHP Symfony

Trachty Friday

Page 7: Salzburg WebDev Meetup PHP Symfony

We’re hiring

DEVELOPERS DEVELOPERS DEVELOPERS!

Page 8: Salzburg WebDev Meetup PHP Symfony

History

◼ Born in the web 20 years ago◼ Form interpreter to replace perl◼ Core is backed by a company (Zend)◼ 1M to 100M hostnames in 10 years

Page 9: Salzburg WebDev Meetup PHP Symfony

Stack Overflow tags

Source: http://hewgill.com/~greg/stackoverflow/stack_overflow/tags/

Page 10: Salzburg WebDev Meetup PHP Symfony

W3Techs

Source: http://w3techs.com/technologies/overview/programming_language/all

Page 11: Salzburg WebDev Meetup PHP Symfony

Usage

◼ eCommerce: osCommerce, Zen Cart, Magento, PrestaShop, OpenCart, Oxid, xtCommerce, Shopware

◼ CMS: Wordpress, Joomla, Drupal◼ Other: Wikipedia, Digg, Facebook

Page 12: Salzburg WebDev Meetup PHP Symfony

The good

◼ Dead simple: <?php echo “Hello world”;

◼ Runs everywhere◼ Documentation, Community,

Extensions

Page 13: Salzburg WebDev Meetup PHP Symfony

The good

◼ Image processing, databases, mails, character encoding, XML built-in

◼ Few keywords and operators, high readability

Page 14: Salzburg WebDev Meetup PHP Symfony

The bad

◼ Spaghetti code◼ Very loose typing: null == false == "" == 0 == "0" == array()

◼ Inconsistent code base: strpos(), str_rot13(), library not OO

◼ Arbitrary filesystem structure

Page 15: Salzburg WebDev Meetup PHP Symfony

The getting better

◼ OO; Closures, Iterators, Generators◼ Standard PHP Library (SPL): queues,

stacks, lists, iterators◼ Tools: PHPUnit, PHPDocumentor,

Mess Detector, Checkstyle

Page 16: Salzburg WebDev Meetup PHP Symfony

Example

$numbers = array(1, 2, 3, 4, 5);$divisor = 3;

Page 17: Salzburg WebDev Meetup PHP Symfony

Old school

$numbers = array(1, 2, 3, 4, 5);$divisor = 3; $filtered = array();foreach ($numbers as $number) { if ($number % $divisor == 0) { $filtered[] = $number; }}

Page 18: Salzburg WebDev Meetup PHP Symfony

Middle school

$numbers = array(1, 2, 3, 4, 5);$divisor = 3;

$filter = create_function('$number', “return (\$number % $divisor == 0);”);$filtered = array_filter($numbers, $filter);

Page 19: Salzburg WebDev Meetup PHP Symfony

New school

$numbers = array(1, 2, 3, 4, 5);$divisor = 3; $filter = function($number) use ($divisor) { return ($number % $divisor == 0);};$filtered = array_filter($numbers, $filter);

Page 20: Salzburg WebDev Meetup PHP Symfony

Questions?

Page 21: Salzburg WebDev Meetup PHP Symfony

PHP Frameworks

◼ MVC◼ OO◼ ORM◼ Templates◼ ...

Page 22: Salzburg WebDev Meetup PHP Symfony

Symfony

◼ MVC, OO◼ Created by Sensio labs◼ Documentation, Community, Events

Page 23: Salzburg WebDev Meetup PHP Symfony

Symfony

◼ URL Conventions◼ CRUD generators◼ Doctrine ORM, Twig templates◼ Loosely coupled components◼ Dependency injection

Page 24: Salzburg WebDev Meetup PHP Symfony

Demo Time

Page 25: Salzburg WebDev Meetup PHP Symfony

Summary

“PHP is the Nickelback of programming languages”

- Jeff Atwood, Stack Exchange

Page 26: Salzburg WebDev Meetup PHP Symfony

Summary

“The only conclusion I can draw is that building a compelling application is far more important than choice of language”

- Jeff Atwood, Stack Exchange

Page 27: Salzburg WebDev Meetup PHP Symfony

Thanks!

Page 28: Salzburg WebDev Meetup PHP Symfony

Backup: Install instructions

1. Change user: sudo su - www-data -s /bin/bash2. Download Symfony 2.3 Standard Edition (without Vendors): http://symfony.com/download3. Setup git repository: http://symfony.com/doc/current/cookbook/workflow/new_project_git.html4. Install composer: curl -sS https://getcomposer.org/installer | php5. Install libraries: php composer.phar install6. Configure: http://localhost/~georg/webdev/web/config.php

a. pdo_sqlite

b. db path: %kernel.root_dir%/data/example.db

c. no password7. Generate bundle: php app/console generate:bundle8. Generate entity: php app/console generate:doctrine:entity9. Drop the old DB schema: php app/console doctrine:schema:drop --force10. Generate DB schema: php app/console doctrine:schema:create11. Generate CRUD: php app/console generate:doctrine:crud12. http://localhost/~georg/webdev/web/app_dev.php/post/13. Add pretty CRUD bundle: https://github.com/jordillonch/CrudGeneratorBundle14. Install new bundle: php composer.phar update15. Delete the old CRUD: rm -fr src/FINDOLOGIC/ExampleBundle/Resources/views/Post/

src/FINDOLOGIC/ExampleBundle/Controller/PostController.php src/FINDOLOGIC/ExampleBundle/Form/PostType.php src/FINDOLOGIC/ExampleBundle/Tests/Controller/PostControllerTest.php

16. Generate new CRUD: php app/console jordillonch:generate:crud17. Fill created_at automatically:

http://stackoverflow.com/questions/17321893/automatic-values-for-updated-at-created-at-in-doctrine

a. Remove created_at from src/FINDOLOGIC/ExampleBundle/Form/PostType.php18. http://localhost/~georg/webdev/web/app_dev.php/post/