Laravel & WordPress Integration

Laravel & WordPress Integration

Routing and Controller: In general, a back-end web application has one primary responsibility: to read each request and create a response depending on the content of the request. The controller is a class responsible for transforming the request to the response by calling application methods, while the router is a mechanism that helps you to detect which controller class and method you should execute for a particular request.

In the real-life applications, you shouldn’t call ORM from the controller. Instead, you should call a service that will try to find the post or throw HTTP 404 Exception.

Dependency Injection

Applications have a lot of different services and components, with various interdependencies. You need to store all the information about the created objects and their dependencies somehow.

Here comes our next component: Service Container. It is a PHP object that creates requested services and stores information about the created objects and their dependencies.

Also, facades provide a “static” interface to classes that are available in the application’s service container.

Great comparison article by comparing modules both in Symfony and Laravel.

There are several uses for a repository pattern. It can be used to avoid having to use the singleton pattern for classes that you need to reuse the same instance of in most, but not all situations throughout your project. For example, you may have a settings class that holds the settings for your plugin. You’d probably want to use the same instance of that class most of the time but have flexibility.

Integrating WordPress inside Laravel

  • corcel/corcel is used to create a Laravel or any PHP application, but use data directly from a WordPress database.
    There is an example on how to create separate Laravel app that will transfer Google Docs to Wordpress using WP’s JSON Rest API.

Why, when, and how to develop WordPress with Laravel features

Here is the most interesting part of the article, Laravel, and WordPress hybrid. If you are Laravel fan, can’t imagine yourself coding in other frameworks, and have complex applications with a lot of content, Corcel is what u need for happiness. Use WordPress as admin panel and data manipulation, but code controllers, views with Laravel.

Integrating Laravel into WordPress

I want this so I can write flexible plugins with proper coding architecture from the start. There are lot of projects that help in creating plugins using Laravel inspired frameworks, but lot of those are not maintained anymore. Here are some of them that are active:

  • wordplate/wordplate if boilerplate built with Laravel and Symfony components.
    Based a lot on Bedrock and Roots products with a familiar setup for every Laravel enthusiast. The thing that stand up is using Vite.js for build and minification step of frontend assets like CSS and JavaScript. Needs PHP8 but that’s great actually. Also has great ACF and CPT support via plugins vinkla/extended-acf and johnbillion/extended-cpts. Strong candidate for me.

  • Acorn | roots/acorn could be my solution.
    Provides a way to load a Laravel application container inside of WordPress, while respecting the WordPress lifecycle and template hierarchy. Quite poorly documented for now, but it is THE ONLY actively maintained that exactly fits my requirements and is used in their popular Sage theme

  • wpbones/WPBones has plugin bolerplate wpbones/WPKirk is active and is good fit.
    It’s not exactly Laravel, as it is using wpbones/WPBones framework, but very similar. wpbones/WPBones framework is actively maintained and has nice documentation at wpbones/WPBones Wiki. Semms that it really fits my use case: Typical Workflow

  • WP Emerge has a starter plugin htmlburger/wpemerge-plugin.
    It is actively developed but not sure how stable it is. Coded by amazing author Atanas Angelov that now works exactly at Automattic. Uses htmlburger/wpemerge micro-framework inspired by Laravel and such. There is also a Starter Theme

  • WordPress MVC is framework, but not Laravel out of the box.
    Not sure how active it is as there are no recent commits at 10quality/wpmvc

Dead projects

Composer Based Whole Setup WordPress Boilerplates

There are a couple of Composer based WP boilerplates and they all feature improved folder structure among other great features.

  1. roots/bedrock
    The undisputed king that can be used with Acorn Laravel implementation from same company

  2. feryardiant/wpdev
    Personal WordPress boilerplate based-on Bedrock by Roots

  3. wecodemore/wpstarter

After careful research, I’ve decided on Bedrock as it is updated regularly and it is also the most famous with most articles around the net. It also supports enabling classic plugin upload and there are quite a good solutions to solve problems like that; paid plugins and such.

Examples of using Laravel in a plugin

Handy Composer Tools to Use

  • franzliedke/studio allows using the packages you’re working on NOT from the online Packagist repository but symlink them from the local filesystem. It is made to ease a process of developing Composer packages itself, but can be used in various ways. It is like orchestral/testbench but not Laravel-only.

  • SanderSander/composer-link also adds ability to link local packages for development with composer

Best explanation on The Laravel Service Container demystified - Beyond Code

laraish/laraish: The WordPress theme powered by the Laravel Framework.

On composer race conditions in Wordpress

Problem explained: A Narrative of Using Composer in a WordPress Plugin – WP Tavern

Composer Archives - Delicious Brains

humbug/php-scoper: 🔨 Prefixes all PHP namespaces in a file/directory to isolate the code bundled in PHARs. coenjacobs/mozart: is older version of php-scoper - Developers tool for WordPress plugins: Wraps all your projects dependencies in your own namespace, in order to prevent conflicts with other plugins loading the same dependencies in different versions.

wpify / Scoper · GitLab

date 22. Jun 2022 | modified 25. Jan 2023
filename: Wordpress » Laravel Integration