Site

Convenções v4

v4

Padrões oficiais de namespace, nomenclatura e organização. Seguir essas regras mantém o projeto consistente e compatível com o autoload PSR-4.


Classes e namespaces — tudo lowercase

No MuCRM v4, classes, namespaces e facades usam snake_case. Não use PascalCase como em outros frameworks.

ErradoCorreto
MUCRM\Engine\Support\Facades\LogMUCRM\engine\support\log
MUCRM\Engine\Support\Facades\DB\DB ou MUCRM\engine\support\facades\db
MUCRM\Engine\Support\RequestMUCRM\engine\support\request
URI::get()uri::get()
User::find()customer::find() (classe snake_case)
use MUCRM\engine\support\facades\uri;
use MUCRM\engine\support\{request, responder};
use MUCRM\engine\support\log;

\DB::transaction(fn () => true);
log::info('Pedido criado');
uri::get('/loja', [web_handler::class, 'index']);

Namespaces

Composer mapeia MUCRM\app/.

ÁreaNamespaceCaminho
EngineMUCRM\engine\...app/engine/...
Handlers HTTPMUCRM\http\...app/http/...
MódulosMUCRM\modules\{nome}\...app/modules/{nome}/...
ServiçosMUCRM\shared\...app/shared/...
namespace MUCRM\modules\billing\handlers;
namespace MUCRM\modules\billing\models;
namespace MUCRM\http\web\handlers;
namespace MUCRM\shared\services;

Nomenclatura

TipoPadrãoExemplo
Classe / arquivosnake_caseweb_handler.php
Handlerestende MUCRM\http\handlerpanel_handler
Modelestende schemabilling_plan
Viewnotação com pontoindex.mucrm.php
Rota nomeadadot notationuser.profile.show
namespace MUCRM\modules\billing\handlers;

use MUCRM\engine\support\{request, responder};
use MUCRM\http\handler;

class web_handler extends handler
{
    protected string $layout = '_layouts.app';

    public function index(request $req, responder $res)
    {
        return $this->view('Billing.index', compact('plans'))
            ->title('Planos');
    }
}

Relacionamentos ORM

v4Legado (removido)
has_one()attach_one()
has_many()attach_many()
belongs_to()related_to()
belongs_to_many()related_to_many()

Use snake_case nos métodos e no acesso — não camelCase.

// Model
public function profile_data()
{
    return $this->has_one(profile_data::class, 'user_id', 'id');
}

// Uso
$user->profile_data;
auth()->load('profile_data');

Helpers em namespaces

Dentro de namespace MUCRM\..., chame helpers globais com \ na frente:

\config('app.server.name');
\logged();
\to('user.panel');

Sem o prefixo, o PHP procura a função no namespace atual e falha.


Checklist de migração v3 → v4

  • Namespace MUCRM\modules\{nome}\...
  • Controllers → handlers
  • Views: PHP puro com e(), csrf(), method()
  • Relações: has_one, has_many, belongs_to
  • Rotas: facade uri::
  • Auth: logged() / account()
  • Config: config/ na raiz (não bootstrap/config/)
  • Temas: themes/ com pastas _layouts/ e _components/ (não resources/views/)