CI4MS is a CodeIgniter 4-based CMS skeleton that delivers a production-ready, modular architecture with RBAC authorization and theme support. It combines CMS workflows, developer-focused CLI commands, an extensible module system, and customizable front-end themes in a single package.
- Authentication & RBAC:
Modules\Authhandles user login, lockouts, and password resets, while permissions map toauth_permissions_pagesrecords. - Modular backend: Each feature ships as an independent module (Blog, Pages, Menu, Media, Users, Settings, Theme, etc.) under
modules/*. - Flexible content management: Page and blog entries include SEO metadata, categories, tags, and full comment workflows.
- Media & files: Includes elFinder-powered media management, a built-in file editor, and an in-panel log viewer.
- Theme system: The
public/templates/*structure and theModules\Thememodule enable installing or upgrading themes from ZIP packages. - Setup & automation: Offers a web-based installer (
/install) plus CLI commands for default data seeding, automatic route generation, and module scaffolding viaphp spark make:module. - SEO helpers:
Ci4msseoLibrarybuilds meta tags and JSON-LD, whileCommonLibrarycentralizes email, breadcrumbs, and inline shortcode utilities.
- PHP 8.1 or newer (intl, json, mbstring, gd, curl, openssl recommended)
- Composer
- MySQL/MariaDB (or any CodeIgniter 4-supported driver)
- Writable directories:
writable/,public/uploads/, optionallypublic/templates/
See composer.json for the full dependency list (e.g. bertugfahriozer/ci4commonmodel, bertugfahriozer/sql2migration, ci4-cms-erp/ext_module_generator, claviska/simpleimage, seunmatt/codeigniter-log-viewer, gregwar/captcha, jasongrimes/paginator, melbahja/seo, studio-42/elfinder, phpmailer/phpmailer).
composer create-project ci4-cms-erp/ci4ms myproject
cd myprojectgit clone <repo-url> ci4ms
cd ci4ms
composer install- Create your
.envand enable the development environment:cp env .env php spark env development
- Update these core settings in
.env:app.baseURLdatabase.default.*- Optional:
cookie.*,honeypot.*,security.*
- If you prefer the web installer, open
/installin the browser and follow the wizard. Use the CLI steps below if you want to skip the wizard.
php spark migrate
php spark db:seed Ci4msDefaultsSeeder # You will be prompted for your name, email, and password
php spark create:route # Generates the default routes file
php spark key:generate # Creates an encryption keyThe seeder provisions an active administrator account (group_id=1) and populates the initial module records.
php spark serveAccess the backend via: https://<domain>/backend
app/Controllers/Home.phpβ Handles front-end pages, blog listings, details, and comments.app/Libraries/β Shared helpers (email, SEO, shortcodes).app/Commands/β CLI tooling (make:a*,create:route).app/Filters/Ci4ms.phpβ Install guard, maintenance mode redirect, menu cache.modules/*β Each module includes its ownConfig/Routes.php,Controllers,Models,Views,Language,Libraries,Filters.public/templates/β Theme assets; each theme requiresinfo.xmlandscreenshot.png.writable/β Cache, logs, temporary files.
| Module | Purpose | Highlights |
|---|---|---|
| Auth | Authentication lifecycle | CAPTCHA, email activation, reset tokens |
| Backend | Admin shell | Dashboard stats, shared base controller |
| Blog | Blog CRUD | Categories, tags, comments, bad-word filters |
| Pages | Static page management | SEO fields, inline shortcode parsing |
| Menu | Menu builder | Drag-and-drop ordering, slug helpers |
| Media | Media manager | elFinder integration, optional WebP conversion |
| Fileeditor | Project file editor | Safe read/write/rename/move/delete |
| Settings | System configuration | Company/social/mail settings, encrypted SMTP password |
| Users | User & role management | Group-based permissions, reset tracking |
| Methods | Route β permission mapping | Module toggling, router scan |
| Logs | Log viewer | Browses CodeIgniter log files inside the backend |
| ModulesInstaller | Module ZIP installer | Upload + cache invalidation |
| Theme | Theme manager | ZIP upload, duplicate folder checks |
| Install | Web installer | Creates .env, triggers migrations |
See docs/architecture.md for deeper architectural notes.
php spark make:module Blogβ Scaffolds a module (Config,Controllers,Views, language files, etc.).php spark make:acontroller Exampleβ Generates a backend controller template.php spark make:amodel Exampleβ Generates a backend model (with options for table, return type).php spark make:abview dashboardβ Generates a backend view from the AdminLTE template.php spark create:routeβ Rebuildsapp/Config/Routes.phpfrom the template.- Standard CodeIgniter commands:
php spark migrate,php spark db:seed,php spark cache:clear, etc.
- Cache keys:
settings(24h),menus(menu tree, 24h),{userId}_permissions. Clear withphp spark cache:clearorcache()->delete(). - Base controller: Extend
Modules\Backend\Controllers\BaseControllerfor new backend controllers; it prepares session user, navigation, mail settings, and shared data. - Permissions: Remember to register new secured routes in
Modules\Methods(or via the database) so the permission filter recognizes them. The backend log viewer lives under/backend/logsand follows the same permission model. - Slug generation:
seflink()handles transliteration (including Turkish characters). - Form security: Global CSRF is enabled; backend AJAX endpoints opt out via
BackendConfig::$csrfExcept. - Comment moderation:
CommonLibrary::commentBadwordFilteringhandles bad word filtering and moderation rules. - Email delivery:
CommonLibrary::phpMailer()resolves SMTP settings from encrypted storage insettings.mail. - Theme uploads: Each theme must include
info.xmlandscreenshot.png; missing files trigger a backend warning.
composer test- Add coding standards or static analysis as needed (not included by default).
- Maintenance mode: When
settings.maintenanceMode.scalar == 1, theCi4msfilter redirects visitors tomaintenance-mode. - Security:
FileeditorandMediaenforcerealpathguards. Limit access in production environments.
docs/architecture.mdβ Architecture, flow, permissions, and extension guidance.
Questions or contributions? Open an issue or pull request.