Add a MVC framework to wordpress, based on Themosis Framework .
In your theme directory
$ composer require wenprise/mvc
add psr-4 autoload rule to composer.json
"autoload": {
"psr-4": {
"Theme\\": "app/"
}
},
the run the dump-autoload
command
$ composer dump-autoload
require_once( get_theme_file_path( 'vendor/autoload.php' ) );
require_once( get_theme_file_path( 'app/init.php' ) );
The structure of theme/app directory.
├── Controllers
│ ├── AccountController.php
├── Models
│ ├── Order.php
├── Providers
│ └── RoutingService.php
├── init.php
└── routes.php
the code in init.php
namespace Theme;
use Theme\Providers\RoutingService;
use Wenprise\Mvc\App;
class Init
{
public function __construct()
{
$GLOBALS[ 'wenprise' ] = App::instance();
/*
* 获取服务容器
*/
$container = $GLOBALS[ 'wenprise' ]->container;
/*
* 注册主题视图路径
*/
$container[ 'view.finder' ]->addLocation(get_theme_file_path('templates'));
/*
* 加载配置文件
*/
$container[ 'config.finder' ]->addPaths([
get_theme_file_path('app/Config/'),
]);
/**
* 主题服务提供者
*/
$providers = [
RoutingService::class,
];
foreach ($providers as $provider) {
$container->register($provider);
}
}
}
the code in RoutingService.php
namespace Theme\Providers;
use Wenprise\Facades\Route;
use Wenprise\Foundation\ServiceProvider;
class RoutingService extends ServiceProvider {
public function register() {
Route::group( [
'namespace' => 'Theme\Controllers',
], function () {
require get_theme_file_path( 'app/routes.php' );
} );
}
}
the code in routes.php
Route::prefix( 'account' )->group( function () {
Route::match( [ 'get', 'post' ], 'register', 'AccountController@register' );
} );
Sampel Controller
namespace Theme\Controllers;
use Wenprise\Route\BaseController;
class AccountController extends BaseController {
/**
* User register controller
* @return string
*/
public function register() {
}
}
See: Wenprise Eloquent
See https://laravel.com/docs/5.5/blade or https://twig.symfony.com/