czim/laravel-cms-core
Core building blocks for building a CMS in Laravel: content and page models, module structure, URL and menu handling, plus reusable abstractions you can extend. Gives your app a flexible foundation for managing editable content without adopting a full CMS.
composer require czim/laravel-cms-core — because the package is archived, check its composer.json constraints against your Laravel/PHP versions and pin the exact version ("czim/laravel-cms-core": "x.y.*"). Expect to run an older Laravel or maintain a fork.Czim\CmsCore\Providers\CmsCoreServiceProvider; on older versions add it to config/app.php. Verify with php artisan about or by resolving the core from the container.php artisan vendor:publish --provider="Czim\CmsCore\Providers\CmsCoreServiceProvider"
php artisan migrate
Inspect the published config/cms-core.php — module registration, cache, auth, and page/menu settings live there.Czim\CmsCore\Contracts\ (core, modules, pages, menus, cache, auth, media, API). Those interfaces tell you what is stable enough to depend on; concrete classes are implementation details.Module base class, register it in config/cms-core.php, and let its boot method register routes, menu entries, permissions, and API endpoints. Keep one module per feature so enable/disable is a config change rather than a code change.PageInterface/repository contracts rather than concrete Eloquent classes. In your own service provider, $this->app->bind(...) the core contracts to your implementations so upgrades and forks stay manageable.pages query. Resolve the tree once per request, eager-load children, and cache the rendered result keyed by menu handle + locale.Cache::remember directly, so the CMS's own cache-clearing hooks (on save/publish/module change) reach your entries.config/cms-core.php, run php artisan config:clear (and cache:clear in production). A cached config is the most common reason a newly registered module "doesn't exist."--tag=config) and port migrations selectively.(slug, locale) at the database level, not just in validation; concurrent saves otherwise produce ambiguous lookups.php artisan tinker then app('cms.core') (or resolve the module manager) to inspect registered modules and bindings; log module boot order when routes or menu items go missing.vendor/ — with an archived package, those edits are effectively permanent and untracked.How can I help you explore Laravel packages today?