CMS - Add a CMS to any Laravel app to gain control of: pages, blogs, galleries, events, custom modules, images and more.
- Introdução
- Instalação
- Arquitetura e Estrutura Interna
- Principais Módulos e Funcionalidades
- Uso Prático
- Integração com o Ecossistema Rica Soluções
- Extensão e Customização
- Exemplos Reais
- Ferramentas de Desenvolvimento
- Guia de Contribuição
SierraTecnologia CMS é uma biblioteca Laravel completa e extensível que adiciona funcionalidades de gerenciamento de conteúdo (CMS) a qualquer aplicação Laravel existente. Desenvolvida pela Rica Soluções/SierraTecnologia, a biblioteca oferece controle total sobre:
- 📄 Páginas estáticas e dinâmicas
- 📝 Blogs e artigos
- 📅 Calendário de eventos
- 🖼️ Galeria de imagens
- 📁 Gerenciamento de arquivos
- 🧭 Menus de navegação
- 🧩 Widgets reutilizáveis
- ❓ FAQs (Perguntas Frequentes)
- 🎁 Promoções e destaques
A filosofia central do SierraTecnologia CMS é fornecer uma solução modular, extensível e profissional para gerenciamento de conteúdo, seguindo os melhores padrões de desenvolvimento Laravel e arquitetura de software:
- Modularidade: Ative apenas os módulos que você precisa
- Extensibilidade: Crie módulos customizados facilmente
- Padrões de Código: PSR-12, SOLID, e Laravel Best Practices
- Testabilidade: Cobertura completa de testes unitários e de integração
- Documentação: Código bem documentado e exemplos práticos
✅ Produtividade: Não reinvente a roda - use componentes prontos e testados ✅ Padronização: Código consistente seguindo padrões da Rica Soluções ✅ Manutenibilidade: Arquitetura limpa facilita manutenção e evolução ✅ Multiidioma: Suporte nativo a múltiplos idiomas ✅ Versionamento: Histórico completo de alterações em conteúdo ✅ SEO-Ready: Recursos otimizados para mecanismos de busca ✅ Segurança: Validações, criptografia e proteção de assets
O CMS faz parte do ecossistema maior da Rica Soluções, integrando-se perfeitamente com:
- sierratecnologia/builder: Geração de código e scaffolding
- ricardosierra/translation: Sistema de tradução e internacionalização
- ricardosierra/minify: Otimização de assets (CSS/JS)
- Outros pacotes: API base, GraphQL, arquiteto, técnico, etc.
- PHP: 7.1.3 ou superior (recomendado PHP 8.0+)
- Laravel: 7.x ou superior
- MySQL: 5.7+ ou PostgreSQL 9.6+
- Composer: 2.x
- Extensões PHP: OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, BCMath, Fileinfo, GD
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/SierraTecnologia/CMS"
}
]
}composer require sierratecnologia/cms# Publicar todos os assets (configuração, views, controllers, rotas, temas)
php artisan vendor:publish --provider="SierraTecnologia\Cms\SierraTecnologiaCmsProvider"
# Publicar apenas as views do backend (opcional)
php artisan vendor:publish --provider="SierraTecnologia\Cms\SierraTecnologiaCmsProvider" --tag="backend"php artisan migratephp artisan cms:setupEste comando irá:
- Gerar chaves de criptografia
- Criar estruturas iniciais
- Configurar o ambiente
O ServiceProvider principal (SierraTecnologiaCmsProvider) é registrado automaticamente via auto-discovery do Laravel 5.5+.
Se você desabilitou o auto-discovery, adicione manualmente em config/app.php:
'providers' => [
// ...
SierraTecnologia\Cms\SierraTecnologiaCmsProvider::class,
],O arquivo de configuração principal está em config/cms.php. Principais configurações:
return [
// Analytics: 'google' ou 'internal'
'analytics' => 'internal',
// Prefixo de rotas do backend
'backend-route-prefix' => 'cms',
// Tema do frontend
'frontend-theme' => 'default',
// Tema do backend: 'standard' ou 'dark'
'backend-theme' => 'standard',
// Paginação padrão
'pagination' => 24,
// Módulos ativos
'active-core-modules' => [
'blog', 'menus', 'files', 'images',
'pages', 'widgets', 'promotions',
'events', 'faqs',
],
// Idiomas suportados
'languages' => [
'en' => 'english',
'pt' => 'portuguese',
'es' => 'spanish',
],
// Storage: 'local' ou 's3'
'storage-location' => 'local',
// Tamanho máximo de upload (bytes)
'max-file-upload-size' => 6291456, // 6MB
];src/
├── Assets/ # Recursos estáticos (CSS, JS, imagens)
├── Console/ # Comandos Artisan (8 comandos)
├── Controllers/ # Controllers do backend (18 controllers)
├── Facades/ # Facades para serviços (6 facades)
├── Helpers/ # Funções helpers (blade.php, general.php)
├── Middleware/ # Middleware custom (analytics)
├── Migrations/ # Migrações de banco (15 tabelas)
├── Models/ # Modelos Eloquent (12 modelos)
├── Providers/ # Service Providers adicionais
├── Repositories/ # Padrão Repository (11 repositórios)
├── Requests/ # Form Requests/Validações (10 requests)
├── Routes/ # Definições de rotas (web.php, api.php)
├── Services/ # Lógica de negócio (11 serviços + traits)
├── Templates/ # Templates para geração de código
├── Views/ # Views Blade do backend (60+ views)
└── PublishedAssets/ # Assets publicáveis para o projeto
├── Config/ # Arquivo de configuração
├── Controllers/ # Controllers customizáveis
├── Middleware/ # Middleware customizável
├── Routes/ # Rotas customizáveis
├── Setup/ # Views de setup
├── Theme/ # Tema padrão
└── Views/ # Views customizáveis
O SierraTecnologia CMS implementa uma arquitetura em camadas baseada no Service-Repository Pattern combinado com MVC:
┌─────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ Controllers (PagesController, BlogController, etc.) │
│ - Recebem requisições HTTP │
│ - Delegam lógica para Services │
│ - Retornam Views ou JSON │
└────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────┐
│ APPLICATION LAYER │
│ Services (PageService, BlogService, ModuleService) │
│ - Contêm lógica de negócio │
│ - Usam Repositories para acesso a dados │
│ - Implementam Traits para reutilização │
└────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────┐
│ DOMAIN LAYER │
│ Repositories (PageRepository, BlogRepository) │
│ - Acesso a dados via Eloquent │
│ - Queries e filtros │
│ Models (Page, Blog, Event, etc.) │
│ - Entidades do domínio │
│ - Relacionamentos Eloquent │
└────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ Eloquent ORM + Migrations + Database │
└─────────────────────────────────────────────────────────────┘
Fluxo típico de uma requisição (exemplo: criar página)
1. POST /cms/pages
↓
2. PagesController@store
- Valida com PagesRequest
- Prepara dados
↓
3. PageRepository@store
- parseBlocks() - extrai blocos dinâmicos
- Processa hero_image
- Define published_at
↓
4. Page Model (Eloquent)
- Aplica regras de validação
- Mutadores/Accessors
- afterSaved() → cria Archive (histórico)
↓
5. Database INSERT
↓
6. Response: redirect + notification
- PSR-12: Padrão de código rigorosamente seguido
- Namespaces: Sempre
SierraTecnologia\Cms\{Layer}\{Component} - Nomenclatura:
- Controllers:
{Entity}Controller(ex:PagesController) - Services:
{Entity}Service(ex:PageService) - Repositories:
{Entity}Repository(ex:PageRepository) - Models:
{Entity}(ex:Page) - Requests:
{Entity}Request(ex:PagesRequest)
- Controllers:
- Traits: Para funcionalidades compartilhadas (
MenuServiceTrait,ModuleServiceTrait) - Facades: Para acesso simplificado (
Cms::,PageService::)
Gerenciamento completo de páginas estáticas e dinâmicas.
Funcionalidades:
- ✏️ Editor WYSIWYG (Redactor)
- 📋 Templates dinâmicos
- 🧱 Blocos customizáveis (JSON)
- 🔍 SEO (title, description, keywords)
- 📅 Publicação agendada
- 🖼️ Imagem hero/destaque
- 📜 Histórico de versões
- 🌐 Multilíngue
Exemplo de uso (src/Controllers/PagesController.php:145):
// No Controller
use SierraTecnologia\Cms\Repositories\PageRepository;
$pageRepo = app(PageRepository::class);
// Criar página
$page = $pageRepo->store([
'title' => 'Sobre Nós',
'url' => 'sobre-nos',
'entry' => '<h1>Nossa História</h1><p>...</p>',
'is_published' => true,
'published_at' => now(),
'seo_description' => 'Conheça nossa história',
'seo_keywords' => 'sobre, empresa, história',
]);
// Buscar por URL
$page = $pageRepo->findPagesByURL('sobre-nos');
// Listar publicadas
$pages = $pageRepo->published();Rotas:
GET /cms/pages → PagesController@index
GET /cms/pages/create → PagesController@create
POST /cms/pages → PagesController@store
GET /cms/pages/{id}/edit → PagesController@edit
PATCH /cms/pages/{id} → PagesController@update
DELETE /cms/pages/{id} → PagesController@destroy
POST /cms/pages/search → PagesController@search
Sistema completo de blog com tags, SEO e publicação agendada.
Funcionalidades:
- 📝 Posts com editor rico
- 🏷️ Sistema de tags
- 🔍 SEO otimizado
- 📅 Publicação agendada
- 🖼️ Imagem de destaque
- 📊 RSS Feed
- 🌐 Multilíngue
Exemplo de uso (src/Controllers/BlogController.php:98):
use SierraTecnologia\Cms\Repositories\BlogRepository;
$blogRepo = app(BlogRepository::class);
// Criar post
$post = $blogRepo->store([
'title' => 'Laravel 10 - Novidades',
'url' => 'laravel-10-novidades',
'entry' => '<p>O Laravel 10 trouxe várias melhorias...</p>',
'tags' => 'laravel,php,framework',
'is_published' => true,
'published_at' => now(),
]);
// Listar posts publicados
$posts = $blogRepo->published();Blade Helpers:
{{-- Listar últimos posts --}}
@foreach(app('SierraTecnologia\Cms\Repositories\BlogRepository')->published()->take(5) as $post)
<article>
<h2>{{ $post->title }}</h2>
<p>{{ $post->seo_description }}</p>
<a href="/blog/{{ $post->url }}">Ler mais</a>
</article>
@endforeachSistema de menus dinâmicos com ordenação (src/Controllers/MenuController.php:67).
Funcionalidades:
- 🧭 Estrutura hierárquica
- 🔢 Ordenação customizável
- 🔗 Links internos/externos
- 🌐 Multilíngue
Blade Helpers:
{{-- Renderizar menu --}}
@menu('main')
{{-- Com view customizada --}}
@menu('main', 'partials.navigation')Sistema completo de upload e gerenciamento (src/Controllers/ImagesController.php:213).
Blade Helpers:
{{-- Renderizar imagem --}}
@image('produto-destaque.jpg', 'alt text')
{{-- Listar imagens por tag --}}
@images('portfolio')Blocos de conteúdo reutilizáveis via slug (src/Controllers/WidgetsController.php:45).
{{-- Renderizar widget --}}
@widget('footer-contato')- Events: Calendário de eventos (src/Controllers/EventController.php:72)
- Files: Gerenciamento de arquivos (src/Controllers/FilesController.php:165)
- FAQs: Perguntas frequentes (src/Controllers/FAQController.php:34)
- Promotions: Promoções e destaques (src/Controllers/PromotionsController.php:56)
Cenário: Você tem um projeto Laravel de e-commerce e quer adicionar blog, páginas institucionais e FAQs.
composer require sierratecnologia/cms
php artisan vendor:publish --provider="SierraTecnologia\Cms\SierraTecnologiaCmsProvider"
php artisan migrate
php artisan cms:setupEm config/cms.php:
'active-core-modules' => [
'blog',
'pages',
'faqs',
],http://seusite.com/cms
// app/Http/Controllers/PageController.php
public function show($url)
{
$pageRepo = app(\SierraTecnologia\Cms\Repositories\PageRepository::class);
$page = $pageRepo->findPagesByURL($url);
if (!$page) {
abort(404);
}
return view('pages.show', compact('page'));
}{{-- resources/views/pages/show.blade.php --}}
@extends('layouts.app')
@section('title', $page->title)
@section('meta_description', $page->seo_description)
@section('content')
<h1>{{ $page->title }}</h1>
{!! $page->entry !!}
@endsectionO SierraTecnologia CMS integra-se perfeitamente com outras bibliotecas da Rica Soluções:
- Geração automática de código
- Scaffolding de módulos
- CRUD generators
# Gerar CRUD completo
php artisan builder:crud Produto- Sistema completo de tradução
- Suporte multilíngue
- Gestão de idiomas
// Models usam trait HasTranslations
$page->translate('pt')->title = 'Sobre Nós';
$page->translate('en')->title = 'About Us';- Minificação automática de CSS/JS
- Otimização de assets
- Cache de recursos
O CMS possui cobertura completa de testes:
# Executar todos os testes
composer test
# Com cobertura
composer test-coverage
# Apenas testes de feature
vendor/bin/phpunit --testsuite=FeatureO CMS oferece comandos para gerar módulos rapidamente:
php artisan module:make ProdutoIsso criará:
cms/modules/produto/
├── Controllers/
│ └── ProdutoController.php
├── Models/
│ └── Produto.php
├── Repositories/
│ └── ProdutoRepository.php
├── Requests/
│ └── ProdutoRequest.php
├── Routes/
│ └── web.php
├── Views/
│ ├── index.blade.php
│ ├── create.blade.php
│ └── edit.blade.php
└── migrations/
└── create_produtos_table.php
php artisan module:crud Categoriaphp artisan theme:generate MeuTemaEm config/cms.php:
'frontend-theme' => 'MeuTema',O projeto está configurado com ferramentas profissionais de verificação:
# Verificar código
composer cs
# ou
vendor/bin/phpcs
# Corrigir automaticamente
composer cs-fix
# ou
vendor/bin/phpcbfConfiguração: phpcs.xml
# Analisar código
composer stan
# ou
vendor/bin/phpstan analyseConfiguração: phpstan.neon
# Executar testes
composer test
# Com cobertura HTML
composer test-coverageConfiguração: phpunit.xml
O pipeline automatizado executa:
✅ Testes em PHP 7.4, 8.0, 8.1, 8.2 ✅ Testes em Laravel 7.x, 8.x, 9.x, 10.x ✅ PHPCS (PSR-12) ✅ PHPStan (Nível 5) ✅ Security Check ✅ Cobertura de testes (Codecov)
Arquivo: .github/workflows/ci.yml
# Verificar tudo de uma vez
composer check# Setup inicial
php artisan cms:setup
# Gerar chaves de criptografia
php artisan cms:keys
# Módulos
php artisan module:make {name} # Criar módulo completo
php artisan module:crud {name} # Criar CRUD
php artisan module:composer {name} # Gerar composer.json
php artisan module:publish # Publicar módulo
# Temas
php artisan theme:generate {name} # Criar tema
php artisan theme:publish # Publicar tema
php artisan theme:link # Criar symlinkContribuições são muito bem-vindas! Siga os passos:
git clone https://github.com/SEU-USUARIO/CMS.git
cd CMS
composer installgit checkout -b feature/minha-funcionalidade- Escreva código limpo e documentado
- Siga PSR-12
- Adicione testes
- Atualize documentação se necessário
composer checkgit add .
git commit -m "feat: adiciona suporte a vídeos no blog"
git push origin feature/minha-funcionalidade- Descreva suas mudanças
- Referencie issues relacionadas
- Aguarde code review
Use Conventional Commits:
feat: adiciona nova funcionalidade
fix: corrige bug
refactor: refatora código sem mudar funcionalidade
docs: atualiza documentação
test: adiciona ou corrige testes
style: mudanças de formatação
chore: tarefas de manutenção
perf: melhoria de performance
ci: mudanças no CI/CD
Toda contribuição passa por code review:
✅ Código segue PSR-12 ✅ Testes passam ✅ PHPStan nível 5 passa ✅ Cobertura de testes adequada ✅ Documentação atualizada ✅ Sem breaking changes não documentadas
SierraTecnologia CMS is open-sourced software licensed under the MIT license
SierraTecnologia has an OEM licence for the use of Redactor in the SierraTecnologia CMS package. You are fully welcome to use SierraTecnologia CMS package and incorporate it into any apps you build, you are permitted to offer those apps as SaaS or other products. However, you are not entitle to strip out parts of Redactor and resell them, please see this license for more information
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
SierraTecnologia is a software development company specializing in Laravel-based solutions for enterprise applications. We are part of the Rica Soluções ecosystem, providing high-quality, maintainable, and scalable packages for the Laravel community.
To empower developers with robust, well-architected components that accelerate development while maintaining code quality and best practices.
- CMS: Content Management System for Laravel
- Builder: Code generation and scaffolding tools
- Translation: Comprehensive internationalization system
- Minify: Asset optimization and minification
- API Base: RESTful API foundation
- GraphQL Laravel: GraphQL integration
- And many more...
- Website: https://cms.sierratecnologia.ca
- Documentation: https://docs.sierratecnologia.ca/cms
- Gitter: Join the chat
- GitHub Issues: Report a bug
- Email: [email protected]
- Matt Lantz (@mattylantz) - Original creator
- Ricardo Rebello Sierra - Lead maintainer and Rica Soluções architect
We welcome contributions from the community. Please see our contribution guidelines above.
Made with ❤️ by SierraTecnologia & Rica Soluções