Introduction

Motivation

The PHP community has evolved considerably over the past decade, beginning with PHP5's support for object-oriented programming in 2006, to the first meetings of PHP-FIG to develop a set of standards for PHP code, to the release of Composer as the de facto package manager in 2012. At the same time the web development community as a whole has been changing, with websites becoming more dependent on Javascript and CSS to provide sophisticated client-side features. And Javascript has moved even faster!

This breakneck pace has caused a lot of people to get left behind. For someone who hasn't been doing web development continuously for the past ten years, it can feel like a hopeless task to try and get acquainted with all of the new tools and frameworks that seem to be coming out every day. Relevant comic from Abstruse Goose:

BlooP and FlooP and GlooP

The problem is that when you're a busy developer with a lot of Real-Life (tm) projects to work on, it's very difficult to set aside time to read a book about technology X - especially when you're not even sure that you really need to learn X!

UserFrosting has a better idea. Instead of learning about these technologies as a purely academic exercise, you'll work on one of your projects, and learn what you need as you go!

What exactly will I learn?

There are three main categories that UserFrosting attempts to cover: software architecture, tools of the trade, and best practices. Most of the PHP developers we see in chat or on Stack Overflow are behind in at least one these areas:

Software architecture

  • Object-oriented programming and SOLID
  • The model-view-controller (MVC) paradigm
  • Designing for maintainability and reuse
  • Representational State Transfer (REST)
  • Security

Tools of the trade

  • Frameworks
  • Version control (Git)
  • Package management (Composer)
  • Templating engines (Twig)
  • Data modeling and database abstraction (Eloquent)
  • Logging
  • Markdown

Best practices

  • Coding style and standards
  • Development environments
  • Debugging
  • Test-driven development
  • Deployment strategies ("going live")