Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Taoler Laravel Package

taoser/taoler

Taoler is a Laravel package for quickly building admin panels and management backends, with reusable CRUD scaffolding, authentication, and a permission-friendly structure to help teams ship internal tools and content workflows with less boilerplate.

View on GitHub
Deep Wiki
Context7

Getting Started

First, reset expectations. taoser/taoler (TaoLerCMS) is not a Laravel package — it is a complete ThinkPHP 6 CMS application (企业站 / blog / mall / portal). You do not composer require it into an existing Laravel app. You deploy it as its own application and integrate at the HTTP/API boundary. Everything below assumes that stance.

Minimum path to a running instance:

  1. Requirements: PHP 7.4–8.1, MySQL 5.7+, Composer, and the usual extensions (pdo_mysql, mbstring, fileinfo, gd, curl, openssl).
  2. Fetch and install deps:
    git clone https://github.com/taoser/taoler.git taoler
    cd taoler && composer install
    
  3. Point the vhost document root at public/ (never the repo root) and make runtime/ and the upload directory (public/uploads or public/static/uploads, depending on version) writable by PHP.
  4. Configure the database: copy .env.example → .env (or edit config/database.php directly on older builds), set host/name/user/pass and the table prefix.
  5. Run the web installer: visit https://your-host/install (some builds expose /index.php/install). It imports the SQL schema and creates the first admin account.
  6. Log in at /admin, then immediately delete or rename the installer directory.

Where to look first

  • app/ — the ThinkPHP module tree. Expect admin/, index/ (front-end), api/, and shared code in common/. This mirrors Laravel's app/ only in spirit.
  • route/ — URL rules. This is where pseudo-static/SEO URLs are defined; it is the closest analogue to routes/web.php.
  • config/ — every knob (app.php, database.php, cache.php, template.php, route.php). There is no config/* publishing dance; you edit in place.
  • app/index/view/ (or the active theme directory) — think-template files, not Blade.
  • public/static/ — theme CSS/JS/assets.

First real use case: stand TaoLer up on its own subdomain (e.g. cms.example.com) to own the marketing site / blog / product catalog, and consume it from your Laravel app via the bundled api module. That gives you a working editorial UI on day one without touching your Laravel codebase.

Implementation Patterns

Treat TaoLer as a sidecar content service and most integration problems disappear.

1. Sidecar + headless pattern (recommended). Run TaoLer behind its own nginx server block. Add a thin controller under app/api/controller/ (or a small addon) that returns JSON for the resources you care about — articles, categories, product lists — and guard it with a static token in a middleware. In Laravel, wrap it in a dedicated service class with Http::timeout(5)->retry(2, 200)->get(...), cache the result with Cache::remember('taoler:articles:...', 600, ...), and expose typed DTOs. This keeps Eloquent/Blade/queues in Laravel and content authoring in TaoLer.

2. Content sync / mirroring. If you need local joins or search, run a scheduled Laravel command that pulls the API and upserts into Eloquent models. Keep a stable field map (id, cate_id, title, keywords, description, content, create_time, status) and store the raw payload in a json column so schema drift on the CMS side doesn't break you. Sync one-way, Laravel-read-only.

3. Same-domain routing. If you must serve /blog/* from TaoLer under your Laravel domain, reverse-proxy it in nginx (location /blog/ { proxy_pass http://taoler-backend/; }) rather than mixing runtimes in one document root. Do not attempt to share PHP sessions — TaoLer's auth is its own session/permission implementation and will not interoperate with Laravel's auth.

4. SSO-lite for members. Issue a short-lived HMAC-signed token from Laravel, verify it in a TaoLer middleware (in app/common/middleware/ or an addon) against a shared secret, and create/lookup the local member record. Keep TaoLer as the consumer of identity, never the issuer.

5. Extension via addons and hooks. TaoLer's plugin model is string-keyed hooks: Hook::listen('some_hook', $params) registered from an addon's config. It is conceptually Laravel's events/listeners without the typed ergonomics. Prefer a single addon under the addons directory over editing core controllers — it survives git pull. For anything that touches autoloading, add a PSR-4 entry to composer.json (or place classes in extend/) and re-run composer dump-autoload.

6. Themes and templates. Front-end templates use think-template syntax, not Blade:

{volist name="list" id="vo"}
  <a href="{:url('index/article/detail', ['id'=>$vo.id])}">{$vo.title}</a>
{/volist}

Keep your theme in a separate repo or submodule and symlink it into the theme directory so CMS upgrades don't clobber it.

7. Custom models as a content type builder. The admin "model management" feature creates tables and form fields without migrations — a lightweight Nova equivalent. Fine for CRUD content types; do not use it for anything your Laravel app must own transactionally.

8. Config as environment. Put per-environment values in .env, override in config/*.php. There is no config:cache — but there is a runtime cache; see the gotchas.

9. Local development loop. php think run starts the built-in server (the artisan serve analogue). Use php think clear to flush compiled templates and runtime cache. Keep APP_DEBUG=true locally, off everywhere else.

Gotchas and Tips

  • It is not Laravel. No Eloquent, no Blade, no Artisan, no migrations or seeders — schema ships as a SQL dump consumed by the installer. php artisan will do nothing here; the CLI is php think.
  • License is NOASSERTION. There is no recognized OSI file in the repo metadata. Before using this commercially, get written clarification from the maintainer — this is the single biggest risk for a paid client engagement.
  • Document root must be public/. Exposing the repo root leaks config/, .env, and runtime/. Check your nginx root before anything else.
  • Remove the installer after setup. The installer directory remains executable and can re-run schema creation if left in place.
  • Write permissions are install-time only. config/ often needs to be writable during install, then should be read-only. Lock it down afterward.
  • Runtime cache bites. Compiled templates and config land in runtime/. Edits seeming to do nothing almost always mean stale compiled templates — php think clear and hard-refresh.
  • Blank pages are usually template syntax errors. ThinkPHP logs to runtime/log/YYYYMM/DD.log; check there before reaching for a debugger.
  • DB prefix is sticky. prefix in the DB config is embedded in raw query strings in addons. Change it post-install and things break in ways that are painful to trace.
  • URL rewriting is a prerequisite, not a nicety. Without nginx/Apache rules you get index.php/ in every URL. Decide pseudo-static format before launch — changing it later invalidates indexed URLs and any API consumers that cached paths.
  • Hook/addon autoloading is not automatic. Classes outside vendor/ need explicit PSR-4 registration or extend/ placement, otherwise Class not found inside hooks.
  • Prefer overriding via app/common.php, app/event.php, addons, and theme files rather than editing core controllers. There is no clean upgrade path; the only survivable strategy is git pull with zero local edits to tracked core files.
  • Debug mode leaks absolute paths and SQL. Ensure APP_DEBUG=false in production and that runtime/ is not web-accessible.
  • Charset/timezone. Set utf8mb4 and an explicit default_timezone in config/app.php — Chinese content plus emoji silently truncates on utf8.
  • Community is Chinese-first. Docs, issues, and support are largely 中文; factor that into your support budget for a 63-star project. Treat the codebase as the authoritative documentation.
  • Exit strategy. If your Laravel app will ever need to own this content, keep the sync layer and a raw payload column from day one. TaoLer is a fine stopgap; it is not a place to build irreplaceable business logic.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels