Working with PHP for the past 10 years or so has taken me through quite a ride. Starting with rookie mistakes like not being able to find a semicolon to trying to build my own framework for building sites (do not do this), I finally arrived at something great when I learned object-oriented PHP.
Almost all CMS systems use it, including Joomla, Drupal and WordPress, and of course many frameworks like CakePHP use it as well. I arrived at Laravel in early 2014 and I was instantly hooked. It not only uses OOP, it requires it! I have to admit, this was a challenge, but I learned so much thanks to it, and it has made the code I write for other systems a lot better too!
In this article I’ll show you how to get started with Laravel by installing everything that’s needed to run the system, showing you how to use Laravel Homestead—a great virtual machine—and finally, how to install Laravel itself.
It may seem like a mouthful, but I wanted to make sure that everyone can install it, whether they’re on Windows, Linux or Mac, and even if they have few of the prerequisites. Don’t worry, you only need to do most of this stuff once, and even if you need to do it again, it will be much simpler the next time.
Laravel is a PHP Framework created by Taylor Otwell as a more advanced take on the CodeIgniter framework. The first beta was released in mid-2009. As of June 2015, Laravel is at version 5.1, which is the first version to receive LTS (Long Term Support), putting Laravel into the mix when searching for a viable platform for large-scale work.
Laravel is designed to help you work in a standardized, elegant and rapid fashion. This is achieved through strict guidelines and third-party systems.
Laravel has a strict Model-View-Controller (MVC) structure and a natural way of working with object-oriented code. These two features almost force a certain way of writing code on developers—which is a good thing.
As far as style and methodology goes, Laravel applications will be similar, so other developers can come in and work with an instantly familiar mindset.
Laravel’s elegance stems from the same OOP nature and MVC mindset and the routing methodology used. A few simple characteristics of the engine as a whole conspire to make you write code which is visually pleasing, organized, and as self-documenting as possible.
Self-documentation is a wonderful byproduct of well-written object-oriented code. You can achieve almost readable sentences by naming your classes, functions and variables properly, adding up to highly browsable code.
More importantly, all this translates to predictable and testable code which produces consistent, easy-to-foresee results every time.
The speed at which you can build an application is astonishing. If you are new to OOP, Composer and using the terminal, this may not be apparent at first, but once you get the hang of things you will be astonished at what you can accomplish.
Laravel is set up to work well with third-party packages from Composer, which means that adding full support for the Facebook API, or the MailChimp API, Loggers, Profilers and other tools takes a few keystrokes—not minutes or hours.
You can install Laravel on most servers, or create your own using a virtual machine. The basic requirements are:
I’m using Laravel Homestead to run Laravel locally. Homestead is a Vagrant box which you can grab for free. The link above has complete installation instructions if you need them, but I’ll outline the main steps below.
In addition to a server, you’ll need to have Composer installed, which is a package manager. Laravel uses it to download any third-party code it needs.
While git is not strictly necessary, it will make your life a lot easier. Git is a versioning system, and lots of people use it for their projects, hosting them on GitHub. To be able to use git effectively, you’ll need the git command, which we’ll install below.
Composer can be installed locally or globally. I prefer the global option because it makes my life a lot easier, so that’s what I’ll show you here. For more detailed information and instructions for different OS and setups, take a look at the Getting Started Guide.
Linux and OSX users should first make sure that the /usr directory exists, and if it doesn’t, create it. Next, run the following command:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Windows users can use the installer from the Getting Started Guide. If you want to be able to run the composer command from anywhere, you need to place it in your path.
To place a folder in your path, just follow these instructions from WindowsITPro.
Luckily, git is super-simple to install, so just take a look at the Getting Started guide for detailed instructions.
On Linux, you’re most likely to be able to install it with the following simple command.
sudo yum install git-all
On OSX, the easiest way to get git support is to install the Xcode Command Line Tools, or to go to the Git Download page and grab the latest version.
For Windows, head on over to the Git Download page and run the latest installer.
The first thing you’ll need is VirtualBox and Vagrant. Both are simple, installable files, so you just grab them, install them and you’re done.
The box contains the operating system and other software you’ll need to run a local server and Laravel. You can download the box with a single command in your terminal.
vagrant box add laravel/homestead
It may take a while for the box to download, so feel free to grab a coffee at this point.
To install the command-line interface for Homestead, you’ll need to clone a git repository. Since we now have git installed, we can use a single command. Run the following in a folder where you want to keep all your Laravel projects.
git clone https://github.com/laravel/homestead.git Homestead
I work on OSX and I have a folder within my main user home folder named “websites”. Within that folder I have a “wordpress” folder, which contains WordPress projects that run from a different Vagrant box. I ran the command above from within the “websites” folder. This created a “Homestead” folder in there, and all my Laravel projects will be placed within.
If you want to be on the bleeding edge of PHP, you can install the PHP 7 version of Homestead instead. Use the following command:
git clone -b php-7 https://github.com/laravel/homestead.git Homestead
To initialize Homestead, run bash init.sh from within the Homestead folder, which will create the appropriate files in the ~/.homestead directory within your home directory.
The first thing we’ll need to do is create an SSH key and add the path to it to the Homestead.yaml file. To create an SSH key on Linux or OSX, use the following command:
ssh-keygen -t rsa -C "yourname@homestead"
On Windows, the easiest way to create this is to use the Git Bash tool. This is similar to the terminal or Command Prompt but has some added awesome. Switch it on by right-clicking the desktop and clicking Git Bash.
The next step is to modify the ~/.homestead/Homestead.yaml file. Now there’s actually not a lot we need to do because it should already be set up almost perfectly. If you open it up, you should see why:
virtualbox, which is what we’re using.~/.ssh/id_rsa.pub, which should be where your SSH key was saved. Take a look at the messages received when you generated your SSH key, and you should see the path in there.192.168.10.10. You can change it if you’d like to, but we’ll be working with this.In fact, all we’ll do is modify the sites section and set the shared folder. It would work just fine as it is, but we’ll be running a number of projects, so it’s best if you already know how to create them. Let’s create two test sites, a blog and a webshop, which we want to reach through http://blog.dev and http://store.local respectively.
Make sure that your sites definition in the file looks like this:
sites:
- map: store.local
to: /home/vagrant/Code/store/public
- map: blog.dev
to: /home/vagrant/Code/blog/public
The last step here is to add the domains to the hosts file on your computer. On Linux and OS X, this file is located at /etc/hosts, and on Windows it is at C:\Windows\System32\drivers\etc\hosts. You need to add two lines to this file:
192.168.10.10 store.local 192.168.19.10 blog.dev
Finally, to set the folder(s) shared between the virtual machine and your local machine, look to the folders section. I’ve set it up like so:
folders:
- map: ~/websites/Homestead/Code
to: /home/vagrant/Code
This will be pretty short! Go to the Homestead folder and run vagrant up. The first time you do this it may take a while, but subsequent launches will be extremely fast. The first time round an OS is essentially installed and configured, and the next time round it just needs to be booted up.
If you’ve done everything correctly, you should be able to visit http://store.local and get the message “No input file specified”. This is fine—it just means our folder is empty. If you go into your ~/websites/Homestead/Code folder and create the store/public folder and an index.php in it with some content, it will render just fine. At this stage you can start building your website there!
Everything you just did needs to be done only once, except for typing vagrant up to start the server. Don’t worry if creating a Homestead instance isn’t in your blood yet, because for now you just need to know how to use it.
Any time you stop your server using vagrant halt or switch off your computer, you’ll need to use the vagrant up command to start the server. There are a few things you’ll want/need to do, so let’s look at some of the day-to-day tasks.
For some more advanced configurations you’ll need to SSH into the virtual machine. You can do this by navigating to the Homestead directory in your terminal and typing vagrant ssh. This will bring you into the machine and you can set things up here if needed.
You can connect to databases using the homestead username and secret password. If you’re in the terminal you can use the mysql -u homestead -p command and supply your password to get command-line access.
If you use an application like Sequel Pro, you should use 127.0.0.1 as the host, your username and password, and 33060 as the port.
Our first task is to download the Laravel installer. Issue the following command in the terminal:
composer global require "laravel/installer"
You should now be able to type laravel in the command line to access a bunch of great options for working with Laravel. If it doesn’t seem to work, you’ll need to place the ~/.composer/vendor/bin directory in your path. To do that, you’ll need to open your ~/.bashrs or ~/.bash_profile file—which one depends on your setup. Once in there, add the following line to the file:
echo 'export PATH="$PATH:~/.composer/vendor/bin"' >> ~/.bashrc
To see if it worked, type source ~/.bashrc, or close and reopen the terminal window and try typing laravel again. If you’re a Windows user you’ll need to follow the instructions here.
Remember the store folder we set up that holds the code for our upcoming store? I went back, deleted that folder and used the terminal to navigate to the parent folder ~/websites/Homestead/Code. While there I typed laravel new store and just like that, a Laravel project was set up for me. Visiting http://store.local I now see this:
In the next articles about Laravel, I’ll show you how to get started building something as a beginner. Laravel is based strongly around object-oriented PHP, so I recommend you take a look at the excellent OOP For Beginners article by Jason Lengstorf. I’ll explain as much as I can, but if you familiarize yourself with the concepts in that article first, everything will go more smoothly.
The Best Small Business Web Designs by DesignRush
/
2Create Modern Vue Apps Using Create-Vue and Vite
/
9Pros and Cons of Using WordPress
/
-1How to Fix the “There Has Been a Critical Error in Your Website” Error in WordPress
/
2How To Fix The “There Has Been A Critical Error in Your Website” Error in WordPress
How to Create a Privacy Policy Page in WordPress
/
8WordPress Website Maintenance Guide For Beginners
/
8How Long Does it Take to Learn JavaScript
/
1The Best Way to Deep Copy an Object in JavaScript
/
-2
4
-5Adding and Removing Elements From Arrays in JavaScript
/
-2Create a JavaScript AJAX Post Request: With and Without jQuery
/
85 Real-Life Uses for the JavaScript reduce() Method
/
-8How to Enable or Disable a Button With JavaScript: jQuery vs. Vanilla
/
4How to Enable or Disable a Button With JavaScript: jQuery vs Vanilla
/
-3Confirm Yes or No With JavaScript
/
-4How to Change the URL in JavaScript: Redirecting
/
-127 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/
1321 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/
-1130 HTML Best Practices for Beginners
/
-731 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)
/
225 Ridiculously Impressive HTML5 Canvas Experiments
/
-4
1How to Implement Email Verification for New Members
/
3How to Create a Simple Web-Based Chat Application
/
730 Popular WordPress User Interface Elements
/
-3Top 18 Best Practices for Writing Super Readable Code
/
1Best Affiliate WooCommerce Plugins Compared
/
-1118 Best WordPress Star Rating Plugins
/
1510+ Best WordPress Twitter Widgets
/
220+ Best WordPress Booking and Reservation Plugins
/
5Working With Tables in React: Part Two
/
-2Best CSS Animations and Effects on CodeCanyon
/
-1730 CSS Best Practices for Beginners
/
4How to Create a Custom WordPress Plugin From Scratch
/
310 Best Responsive HTML5 Sliders for Images and Text… and 3 Free Options
/
-616 Best Tab and Accordion Widget Plugins for WordPress
/
-718 Best WordPress Membership Plugins and 5 Free Plugins
/
325 Best WooCommerce Plugins for Products, Pricing, Payments and More
/
210 Best WordPress Twitter Widgets
1 /
1112 Best Contact Form PHP Scripts for 2020
/
-220 Popular WordPress User Interface Elements
/
-410 Best WordPress Star Rating Plugins
/
-412 Best CSS Animations on CodeCanyon
/
-212 Best WordPress Booking and Reservation Plugins
/
120 Best WordPress Calendar Plugins and Widgets
/
-312 Elegant CSS Pricing Tables for Your Latest Web Project
/
824 Best WordPress Form Plugins for 2020
/
-2Getting Started With Django: Newly Updated Course
/
-1Create a Blog for Each Category or Department in Your WooCommerce Store
/
38 Best WordPress Booking and Reservation Plugins
/
-15Best Exit Popups for WordPress Compared
/
19Best Exit Popups for WordPress Compared
/
-311 Best Tab & Accordion WordPress Widgets & Plugins
/
-1012 Best Tab & Accordion WordPress Widgets & Plugins
1New Course: Practical React Fundamentals
/
2Short Course: Better Angular App Architecture With Modules
/
3Preview Our New Course on Angular Material
/
4Build Your Own CAPTCHA and Contact Form in PHP
/
-3Object-Oriented PHP With Classes and Objects
/
1Best Practices for ARIA Implementation
/
-5Accessible Apps: Barriers to Access and Getting Started With Accessibility
/
-4Dramatically Speed Up Your React Front-End App Using Lazy Loading
/
1715 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js
/
-1715 Best Modern JavaScript Admin Templates for React, Angular and Vue.js
/
319 Best JavaScript Admin Templates for React, Angular, and Vue.js
/
3New Course: Build an App With JavaScript and the MEAN Stack
/
10Hands-on With ARIA: Accessibility Recipes for Web Apps
/
610 Best WordPress Facebook Widgets
13Hands-on With ARIA: Accessibility for eCommerce
/
6New eBooks Available for Subscribers
/
-8Hands-on With ARIA: Homepage Elements and Standard Navigation
/
11
-5Site Accessibility: Getting Started With ARIA
/
5How Secure Are Your JavaScript Open-Source Dependencies?
/
-3New Course: Secure Your WordPress Site With SSL
/
-2Testing Components in React Using Jest and Enzyme
/
-8Testing Components in React Using Jest: The Basics
/
-515 Best PHP Event Calendar and Booking Scripts
/
-3Create Interactive Gradient Animations Using Granim.js
/
11How to Build Complex, Large-Scale Vue.js Apps With Vuex
1 /
-1Examples of Dependency Injection in PHP With Symfony Components
/
-5Set Up Routing in PHP Applications Using the Symfony Routing Component
1 /
8A Beginner’s Guide to Regular Expressions in JavaScript
/
9Introduction to Popmotion: Custom Animation Scrubber
/
-6Introduction to Popmotion: Pointers and Physics
/
-10New Course: Connect to a Database With Laravel’s Eloquent ORM
/
-6How to Create a Custom Settings Panel in WooCommerce
/
-15Building the DOM faster: speculative parsing, async, defer and preload
1 /
420 Useful PHP Scripts Available on CodeCanyon
3 /
51Introduction to the Stimulus Framework
/
-12Single-Page React Applications With the React-Router and React-Transition-Group Modules
712 Best Contact Form PHP Scripts
1 /
-3Getting Started With the Mojs Animation Library: The ShapeSwirl and Stagger Modules
Getting Started With the Mojs Animation Library: The Shape Module
/
-1Getting Started With the Mojs Animation Library: The HTML Module
/
4Project Management Considerations for Your WordPress Project
/
-88 Things That Make Jest the Best React Testing Framework
/
6Creating an Image Editor Using CamanJS: Layers, Blend Modes, and Events
/
1New Short Course: Code a Front-End App With GraphQL and React
/
1Creating an Image Editor Using CamanJS: Applying Basic Filters
/
-12Creating an Image Editor Using CamanJS: Creating Custom Filters and Blend Modes
/
-1Modern Web Scraping With BeautifulSoup and Selenium
/
1Challenge: Create a To-Do List in React
1 /
-2Deploy PHP Web Applications Using Laravel Forge
/
-3Getting Started With the Mojs Animation Library: The Burst Module
/
4
-910 Things Men Can Do to Support Women in Tech
/
-2A Gentle Introduction to Higher-Order Components in React: Best Practices
/
-5A Gentle Introduction to HOC in React: Learn by Example
/
3A Gentle Introduction to Higher-Order Components in React
/
-6Creating Pretty Popup Messages Using SweetAlert2
/
7Creating Stylish and Responsive Progress Bars Using ProgressBar.js
/
1618 Best Contact Form PHP Scripts for 2022
/
-2How to Make a Real-Time Sports Application Using Node.js
/
-2Creating a Blogging App Using Angular & MongoDB: Delete Post
/
-17Set Up an OAuth2 Server Using Passport in Laravel
/
1Creating a Blogging App Using Angular & MongoDB: Edit Post
/
1Introduction to Mocking in Python
/
1Creating a Blogging App Using Angular & MongoDB: Show Post
/
10Creating a Blogging App Using Angular & MongoDB: Home
/
6
3Creating a Blogging App Using Angular & MongoDB: Login
/
12Creating Your First Angular App: Implement Routing
/
12Persisted WordPress Admin Notices: Part 4
/
-3Creating Your First Angular App: Components, Part 2
/
3Persisted WordPress Admin Notices: Part 3
/
4How Laravel Broadcasting Works
/
-1
7Persisted WordPress Admin Notices: Part 2
/
-2Create Your First Angular App: Storing and Accessing Data
/
6Persisted WordPress Admin Notices: Part 1
/
-1Error and Performance Monitoring for Web & Mobile Apps Using Raygun
/
6Using Luxon for Date and Time in JavaScript
7 /
-3How to Create an Audio Oscillator With the Web Audio API
/
-7How to Cache Using Redis in Django Applications
/
220 Essential WordPress Utilities to Manage Your Site
/
-6Introduction to API Calls With React and Axios
/
13Beginner’s Guide to Angular 4: HTTP
/
13Rapid Web Deployment for Laravel With GitHub, Linode, and RunCloud.io
/
8Beginners Guide to Angular 4: Routing
/
-10Beginner’s Guide to Angular 4: Services
/
1Beginner’s Guide to Angular 4: Components
/
1Creating a Drop-Down Menu for Mobile Pages
/
9Introduction to Forms in Angular 4: Writing Custom Form Validators
/
6Getting Started With Redux: Connecting Redux With React
/
14Getting Started With Redux: Learn by Example
/
14Getting Started With Redux: Why Redux?
/
11How to Auto Update WordPress Salts
/
-4How to Download Files in Python
/
-2
-19Eloquent Mutators and Accessors in Laravel
1 /
15
-11
1310 Best HTML5 Sliders for Images and Text
/
8Site Authentication in Node.js: User Signup
/
-2Creating a Task Manager App Using Ionic: Part 2
/
2Creating a Task Manager App Using Ionic: Part 1
/
1Introduction to Forms in Angular 4: Reactive Forms
/
2
4Introduction to Forms in Angular 4: Template-Driven Forms
/
424 Essential WordPress Utilities to Manage Your Site
/
-125 Essential WordPress Utilities to Manage Your Site
/
-10Get Rid of Bugs Quickly Using BugReplay
1 /
-16Manipulating HTML5 Canvas Using Konva: Part 1, Getting Started
/
610 Must-See Easy Digital Downloads Extensions for Your WordPress Site
/
-222 Best WordPress Booking and Reservation Plugins
/
-5Understanding ExpressJS Routing
/
-615 Best WordPress Star Rating Plugins
/
12Creating Your First Angular App: Basics
/
-1Inheritance and Extending Objects With JavaScript
/
-10Introduction to the CSS Grid Layout With Examples
1 /
4
5Performant Animations Using KUTE.js: Part 5, Easing Functions and Attributes
/
-6Performant Animations Using KUTE.js: Part 4, Animating Text
/
-10Performant Animations Using KUTE.js: Part 3, Animating SVG
/
-8New Course: Code a Quiz App With Vue.js
/
-2Performant Animations Using KUTE.js: Part 2, Animating CSS Properties
/
1
8Performant Animations Using KUTE.js: Part 1, Getting Started
/
110 Best Responsive HTML5 Sliders for Images and Text (Plus 3 Free Options)
/
-3Single-Page Applications With ngRoute and ngAnimate in AngularJS
/
-14Deferring Tasks in Laravel Using Queues
/
-3
2Site Authentication in Node.js: User Signup and Login
/
10Working With Tables in React, Part Two
/
-17Working With Tables in React, Part One
/
1How to Set Up a Scalable, E-Commerce-Ready WordPress Site Using ClusterCS
/
-2New Course on WordPress Conditional Tags
/
2
-11Building With Vue.js 2 and Firebase
6 /
11
-8
1Best Unique Bootstrap JavaScript Plugins
/
-6
-1Essential JavaScript Libraries and Frameworks You Should Know About
/
6
3Vue.js Crash Course: Create a Simple Blog Using Vue.js
/
-14Build a React App With a Laravel RESTful Back End: Part 1, Laravel 5.5 API
/
2API Authentication With Node.js
/
-4Beginner’s Guide to Angular: HTTP
/
8Beginner’s Guide to Angular: Routing
/
-4Beginners Guide to Angular: Routing
/
-4Beginner’s Guide to Angular: Services
/
2Beginner’s Guide to Angular: Components
/
1How to Create a Custom Authentication Guard in Laravel
/
5Learn Computer Science With JavaScript: Part 3, Loops
/
-3Build Web Applications Using Node.js
/
1Learn Computer Science With JavaScript: Part 4, Functions
/
4Learn Computer Science With JavaScript: Part 2, Conditionals
/
13Create Interactive Charts Using Plotly.js, Part 5: Pie and Gauge Charts
/
-8Create Interactive Charts Using Plotly.js, Part 4: Bubble and Dot Charts
/
15Create Interactive Charts Using Plotly.js, Part 3: Bar Charts
/
-10Awesome JavaScript Libraries and Frameworks You Should Know About
/
-6Create Interactive Charts Using Plotly.js, Part 2: Line Charts
/
-8Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js
/
-5Build a To-Do API With Node, Express, and MongoDB
/
-8Getting Started With End-to-End Testing in Angular Using Protractor
/
11TypeScript for Beginners, Part 4: Classes
/
-15Object-Oriented Programming With JavaScript
/
410 Best Affiliate WooCommerce Plugins Compared
/
6Stateful vs. Stateless Functional Components in React
/
8Make Your JavaScript Code Robust With Flow
/
-2Build a To-Do API With Node and Restify
/
7Testing Components in Angular Using Jasmine: Part 2, Services
/
3Testing Components in Angular Using Jasmine: Part 1
/
-1Creating a Blogging App Using React, Part 6: Tags
/
-10React Crash Course for Beginners, Part 3
/
4React Crash Course for Beginners, Part 2
/
5React Crash Course for Beginners, Part 1
/
3Set Up a React Environment, Part 4
1 /
9Set Up a React Environment, Part 3
/
-9New Course: Get Started With Phoenix
/
-7Set Up a React Environment, Part 2
/
2Command Line Basics and Useful Tricks With the Terminal
/
8How to Create a Real-Time Feed Using Phoenix and React
/
-2Build a React App With a Laravel Back End: Part 2, React
/
2Build a React App With a Laravel RESTful Back End: Part 1, Laravel 9 API
/
-4Creating a Blogging App Using React, Part 5: Profile Page
/
-2Pagination in CodeIgniter: The Complete Guide
/
24JavaScript-Based Animations Using Anime.js, Part 4: Callbacks, Easings, and SVG
JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback
Learn to Code With JavaScript: Part 1, The Basics
/
410 Elegant CSS Pricing Tables for Your Latest Web Project
/
-9Getting Started With the Flux Architecture in React
/
-3Getting Started With Matter.js: The Composites and Composite Modules
/
2Getting Started With Matter.js: The Engine and World Modules
/
1410 More Popular HTML5 Projects for You to Use and Study
/
-21Understand the Basics of Laravel Middleware
/
-1Iterating Fast With Django & Heroku
/
9Creating a Blogging App Using React, Part 4: Update & Delete Posts
/
5Creating a jQuery Plugin for Long Shadow Design
/
-12How to Register & Use Laravel Service Providers
2 /
-13Unit Testing in React: Shallow vs. Static Testing
/
4Creating a Blogging App Using React, Part 3: Add & Display Post
/
14Creating a Blogging App Using React, Part 2: User Sign-Up
20 /
-4Creating a Blogging App Using React, Part 1: User Sign-In
/
69 More Popular HTML5 Projects for You to Use and Study
/
15Creating a Grocery List Manager Using Angular, Part 2: Managing Items
/
89 Elegant CSS Pricing Tables for Your Latest Web Project
/
-3Dynamic Page Templates in WordPress, Part 3
/
-4Angular vs. React: 7 Key Features Compared
/
6Creating a Grocery List Manager Using Angular, Part 1: Add & Display Items
/
1New eBooks Available for Subscribers in June 2017
/
7Create Interactive Charts Using Plotly.js, Part 1: Getting Started
/
10The 5 Best IDEs for WordPress Development (And Why)
/
-233 Popular WordPress User Interface Elements
/
2New Course: How to Hack Your Own App
/
-11How to Install Yii on Windows or a Mac
/
3What Is a JavaScript Operator?
/
-7How to Register and Use Laravel Service Providers
/
9
waly Good blog post. I absolutely love this…