cms-orbit / core
A powerful Laravel admin panel and resource management system
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/cms-orbit/core
Requires
- php: ^8.4
- composer-runtime-api: ^2.2
- ext-dom: *
- composer/semver: ^3.0
- hulkur/laravel-hasmany-keyby: ^8.0
- laravel/framework: ^10.0 || ^11.0 || ^12.0
- laravel/scout: ^9.0 || ^10.0
- ralphjsmit/laravel-seo: ^1.6
- spatie/eloquent-sortable: ^4.4
- spatie/laravel-activitylog: ^4.9
- spatie/laravel-sluggable: ^3.7
- spatie/laravel-translatable: ^6.8
- tabuna/breadcrumbs: ^4.0
- twbs/bootstrap-icons: ^1.10
- watson/active: ^7.0
Requires (Dev)
- fakerphp/faker: ^1.9.1
- laravel/pint: ^1.14
- orchestra/testbench: ^8.0 || ^9.0 || ^10.0
- orchestra/testbench-core: ^8.0 || ^9.0 || ^10.0
- orchestra/testbench-dusk: ^8.0 || ^9.0 || ^10.0
- phpunit/phpunit: ^10.0 || ^11.0 || ^12.0
Conflicts
- laravel/framework: <=10.48.25, <=11.34.0
- nesbot/carbon: <2.66.0
- orchestra/testbench-core: <8.23.9
This package is auto-updated.
Last update: 2025-12-07 09:18:57 UTC
README
π κ°λ ₯ν Laravel κΈ°λ° CMS ν¨ν€μ§
Orbit 3.1μ ν΅μ¬ μν°ν° μμ€ν μ κ³μΉνκ³ , λͺ¨λν μν€ν μ²λ‘ μ¬νμν CMS νλ«νΌ
β¨ μ£Όμ κΈ°λ₯
π― μν°ν° μμ€ν
DynamicModel - κΈ°λ³Έ CRUD μν°ν°
- UUID, SoftDeletes, Translations
- Sorting, ActivityLog
- κΆν μλ μμ±
DocumentModel - λ¬Έμν μν°ν°
- λ€κ΅μ΄ μ½ν μΈ μλ κ΄λ¦¬
- μ¬λ¬κ·Έ, SEO μ΅μ ν
- μ‘°νμ, μΆμ²μ, λκΈμ
- μμ±μ μ 보 (Polymorphic)
π§ CLI Commands
cms:entity Product # DynamicModel μν°ν° μμ± (λ§μ΄κ·Έλ μ΄μ μμ± μ¬λΆ λ¬Όμ΄λ΄) cms:entity Product -m # λ§μ΄κ·Έλ μ΄μ μλ μμ± (-m = --migration) cms:document Blog -m # DocumentModel λ¬Έμ μμ± + λ§μ΄κ·Έλ μ΄μ cms:model Review --entity=Article -m # μ’ μ λͺ¨λΈ μμ± + λ§μ΄κ·Έλ μ΄μ cms:migration create_products_table --entity=Product --type=dynamic --create=products cms:admin-fresh # κΆν μλ κ°±μ cms:build-config # Vite/Tailwind μ€μ μμ± # μΈλΆ ν¨ν€μ§ μ§μ cms:entity Product --package=vendor/my-package cms:model Comment --entity=Product --package=vendor/my-package
π SEO μ§μ
- ralphjsmit/laravel-seo ν΅ν©
- HasSeo trait - μλ SEO λ°μ΄ν° μμ±
- HasSitemap trait - Sitemap μλ ν¬ν¨
- FrontendHandler - SEO μ΅μ ν λ λλ§
π¨ λ μ΄μμ νμ₯
- Layout::vue() - Vue μ»΄ν¬λνΈ μ½μ
- μμ ν UI μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬
π¦ μΈλΆ ν¨ν€μ§ μ§μ
- OrbitPackage Facade - μμ λ±λ‘ μμ€ν
- --package μ΅μ μΌλ‘ μ΄λλ μμ±
π μ€μΉ
1. ν¨ν€μ§ μ€μΉ
composer require cms-orbit/core
2. λ§μ΄κ·Έλ μ΄μ
php artisan migrate
3. κ΄λ¦¬μ μμ±
php artisan cms:admin
π κΈ°λ³Έ μ¬μ©λ²
μν°ν° μμ±
# κΈ°λ³Έ μν°ν° (λ§μ΄κ·Έλ μ΄μ μμ± μ¬λΆ λ¬Όμ΄λ΄) php artisan cms:entity Product # β Do you want to create a migration? (yes/no) [yes]: # λλ -m μ΅μ μΌλ‘ μλ μμ± php artisan cms:entity Product -m php artisan migrate php artisan cms:admin-fresh # λ¬Έμ μν°ν° php artisan cms:document Article -m php artisan migrate php artisan cms:admin-fresh # μ’ μ λͺ¨λΈ μμ± (hasMany κ΄κ³ λ±) php artisan cms:model Review --entity=Article -m php artisan migrate
Frontend λ λλ§ (SEO μλ μ§μ)
use CmsOrbit\Core\Frontend\FrontendHandler; Route::get('/blog/{slug}', function ($slug) { $blog = Blog::where('slug', $slug)->firstOrFail(); // SEO μλ μ§μ return FrontendHandler::render('Blog/Show', [ 'blog' => $blog ], $blog); });
Layoutμμ Vue μ»΄ν¬λνΈ μ¬μ©
use CmsOrbit\Core\Support\Facades\Layout; public function layout(): iterable { return [ Layout::rows([ Input::make('title'), TextArea::make('content'), ]), Layout::vue('MyComponent', [ 'prop1' => 'value1', 'prop2' => 'value2', ]), ]; }
π§ Vite ν΅ν© (νλ‘ νΈμλ μ¬μ© μ)
1. Config νμΌ μμ±
php artisan cms:build-config
μ΄ λͺ λ Ήμ΄λ λ€μ νμΌλ€μ μλ μμ±ν©λλ€:
packages/cms-orbit/core/resources/js/lib/vite.jspackages/cms-orbit/core/resources/js/lib/tailwind.jspackages/cms-orbit/core/resources/js/lib/alias.js
2. vite.config.js μμ
import { defineConfig } from 'vite'; import laravel from '@laravel/vite-plugin'; import react from '@vitejs/plugin-react'; import { viteConfig } from '@cms-orbit/core/lib/vite'; export default defineConfig({ ...viteConfig, plugins: [ laravel({ input: ['resources/js/app.tsx', ...viteConfig.input], refresh: true, }), react(), ], });
3. tailwind.config.js μμ
import { tailwindConfig } from '@cms-orbit/core/lib/tailwind'; export default { content: [ './resources/**/*.tsx', './resources/**/*.blade.php', ...tailwindConfig.content, ], // ... λλ¨Έμ§ μ€μ };
4. jsconfig.json (IDE μ§μ)
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["resources/js/*"],
"@cms-orbit/core/*": ["packages/cms-orbit/core/resources/js/*"]
}
}
}
π¦ μΈλΆ ν¨ν€μ§ κ°λ°
ServiceProviderμμ μμ λ±λ‘
use CmsOrbit\Core\Support\Facades\OrbitPackage; class MyPackageServiceProvider extends ServiceProvider { public function register(): void { // Vite κ²½λ‘ λ±λ‘ OrbitPackage::registerPath( '@my-package', __DIR__.'/../resources/js' ); // Vite Entry Point λ±λ‘ OrbitPackage::registerViteEntry('my-package/app.js'); // Tailwind Content λ±λ‘ OrbitPackage::registerTailwindContent( __DIR__.'/../resources/**/*.blade.php' ); // 컀μ€ν νλ λ±λ‘ OrbitPackage::registerField('MyField', MyField::class); // μν°ν° λ±λ‘ OrbitPackage::registerEntity('MyEntity', MyEntity::class); } }
ν¨ν€μ§μ μν°ν° μμ±
php artisan cms:entity Product --package=vendor/my-package php artisan cms:model Comment --entity=Product --package=vendor/my-package php artisan cms:migration create_products_table --entity=Product --package=vendor/my-package --type=dynamic --create=products
ποΈ νλ‘μ νΈ κ΅¬μ‘°
app/Entities/
βββ Product/
β βββ Product.php # DynamicModel
β βββ Review.php # μ’
μ λͺ¨λΈ
β βββ database/
β β βββ migrations/ # μν°ν°λ³ λ§μ΄κ·Έλ μ΄μ
β β βββ 2024_01_01_000001_create_products_table.php
β β βββ 2024_01_01_000002_create_reviews_table.php
β βββ Screens/
β β βββ ProductListScreen.php
β β βββ ProductEditScreen.php
β βββ Layouts/
β β βββ ProductListLayout.php
β β βββ ProductEditLayout.php
β βββ routes/
β βββ orbit.php
β
βββ Article/
βββ Article.php # DocumentModel
βββ Presenters/
β βββ ArticlePresenter.php
βββ database/
β βββ migrations/
β βββ 2024_01_01_000003_create_articles_table.php
βββ Screens/
β βββ ArticleListScreen.php
β βββ ArticleEditScreen.php
βββ Layouts/
β βββ ArticleListLayout.php
β βββ ArticleEditLayout.php
βββ routes/
βββ orbit.php
π¨ Vite & Tailwind ν΅ν©
μ€μ νμΌ μλ μμ±
php artisan cms:build-config
μ΄ λͺ λ Ήμ΄λ λ€μ νμΌλ€μ μμ±ν©λλ€:
packages/cms-orbit/core/resources/js/lib/vite.jspackages/cms-orbit/core/resources/js/lib/tailwind.jspackages/cms-orbit/core/resources/js/lib/alias.js(IDEμ©)
vite.config.js μ€μ
import { defineConfig } from 'vite'; import laravel from '@laravel/vite-plugin'; import react from '@vitejs/plugin-react'; import { viteConfig } from '@cms-orbit/core/lib/vite'; export default defineConfig({ ...viteConfig, plugins: [ laravel({ input: ['resources/js/app.tsx', ...viteConfig.input], refresh: true, }), react(), ], });
tailwind.config.js μ€μ
import { tailwindConfig } from '@cms-orbit/core/lib/tailwind'; export default { content: [ './resources/**/*.tsx', './resources/**/*.blade.php', ...tailwindConfig.content, ], // ... λλ¨Έμ§ μ€μ };
λ°©λ² 3: μ»΄ν¬λνΈ μ§μ λ±λ‘ (κ°λ¨ν κ²½μ°)
// vite.config.js resolve: { alias: { '@': path.resolve(__dirname, 'resources/js'), '@orbit': path.resolve(__dirname, 'vendor/cms-orbit/core/resources/js'), }, }
Vueμμ μ¬μ©:
<script setup> import MyComponent from '@orbit/components/MyComponent.vue'; import PackageComponent from '@my-package/components/PackageComponent.vue'; </script>
π λ¬Έμ
μμΈν λ΄μ©μ ν¨ν€μ§ λλ ν°λ¦¬μ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
π ν΅κ³
- 242κ° PHP νμΌ
- 13κ° Stub νμΌ
- 19κ° Artisan Commands
- 5κ° Traits
- 4κ° Models
π λΌμ΄μ μ€
MIT
Made with β€οΈ by Amuz Corp