pozoltd/mf
pozoltd/mf is a lightweight Laravel/PHP package that provides a simple, configurable MF implementation for your applications. It offers a clean API and straightforward integration into existing projects, making it easy to set up and extend as your needs grow.
First, verify what you're actually installing. The metadata points at pozoltd/mf while the linked repository is pozonz/mf — confirm which is live before investing time. Check the Packagist page, the composer.json require block (a December 2023 release most likely pins Laravel 9/10 illuminate/* constraints), and the repo's src/ tree for a service provider.
Install into a throwaway Laravel app first, not your main project:
composer require pozoltd/mf
php artisan vendor:publish # interactive; pick the mf provider/tags
php artisan migrate
If auto-discovery doesn't fire, the provider is listed manually in config/app.php or under extra.laravel.providers.
Where to look first, in order:
config/mf.php or similar) — route prefix, middleware, content model classes, upload disk.boot() in the service provider — this is the real table of contents for what URLs and bindings the package owns.database/migrations/ — the schema is the API surface for a CMS: content types, pages, blocks, revisions.src/Models/ — relationship graph, and critically whether models are final.First use case worth proving: define one "page" content type, create a record in the admin, render it at a catch-all route, and load it in the browser. If that loop isn't working inside an hour, that is your answer about day-to-day leverage.
Treat the package as the admin/content layer and keep your application as the renderer.
routes/web.php and resolve content by slug in a controller or Route::fallback(). Register your routes first so the package's catch-all can't swallow them.PozoLtd\Mf\*. Everything else in your app depends on the adapter. This is the single highest-value pattern here — it makes the eventual swap a day's work instead of a rewrite.final, subclass them and rebind in a service provider. If they are, wrap them; never edit vendor/.resources/views/vendor/mf/. Upgrades become a diff rather than a merge.render(Content $c) entry point dispatching to mf::types.{type} views. Adding a type is then a view plus a config entry.config/filesystems.php; don't leave it on public in production without storage:link in the deploy script.Cache::remember() and flush via a model observer on save. The package almost certainly does not cache for you.illuminate/* constraints before committing.vendor:publish finds nothing, read register() and boot() directly — that's the entire manual.php artisan route:cache. Test that in CI, not just locally.web + auth group and not its own guard. Mismatched guards are the most common "can't log into the CMS" failure.public/vendor/mf and wire that into your build — otherwise the admin 404s in production.php artisan route:list --path=admin, php artisan about, then tinker against the content model. Faster than reading source for most questions.app/ as first-party code or use a maintained alternative (Filament plus a Page model, Statamic, Twill).How can I help you explore Laravel packages today?