Terbaru: Marko PHP Framework. Perspektif Dev Laravel
Published:
Updated:
Aku jumpa satu framework baru: Marko PHP framework.
First impression:
- macam Laravel + Magento
- modular gila
- tapi very backend-first
So aku test sendiri.
Ini bukan teori. Ini apa aku nampak sebagai developer Laravel.
β‘ TLDR
- Marko = architecture power
- Laravel = ecosystem power
π Marko sesuai untuk sistem besar, modular, dan reusable.
π§ Apa yang aku nampak
1. Ada βModelβ tapi bukan Eloquent
Marko ada package: marko/database
Tapi dia guna: π Data Mapper pattern
Bukan: π Active Record macam Laravel
Contoh Entity
use Marko\Database\Attributes\Column;
use Marko\Database\Attributes\Index;
use Marko\Database\Attributes\Table;
use Marko\Database\Entity\Entity;
#[Table('blog_posts')]
#[Index(columns: ['slug'], unique: true)]
class Post extends Entity
{
#[Column(primaryKey: true, autoIncrement: true)]
public int $id;
#[Column(length: 255)]
public string $title;
#[Column(length: 255, unique: true)]
public string $slug;
#[Column(type: 'text', nullable: true)]
public ?string $content = null;
}
π₯ Interesting part
π Entity = schema
Tak ada migration file manual macam Laravel.
Kau run:
marko db:diff
marko db:migrate
Dia auto sync database.
Repository (wajib guna)
use Marko\Database\Repository\Repository;
class PostRepository extends Repository
{
protected string $entity = Post::class;
}
Compare dengan Laravel
Laravel:
Post::where('slug', $slug)->first();
Marko:
$this->posts->findOneBy(['slug' => $slug]);
π Beza besar:
-
Laravel: model handle query
-
Marko: repository handle query
π§ My take
Kelebihan:
-
clean architecture
-
scalable untuk system besar
-
separation of concern jelas
Kekurangan:
-
lebih banyak boilerplate
-
tak βmagicalβ macam Eloquent
ποΈ 2. Lebih ringan dari Laravel
Laravel datang dengan semua sekali.
Marko:
-
install ikut keperluan
-
minimal core
π Result:
-
lightweight
-
flexible
π§© 3. Modular (ini paling kuat)
Structure:
app/
modules/
vendor/
Priority:
-
app override semua
-
modules tengah
-
vendor paling bawah
π Kau boleh override apa saja tanpa hack vendor
π§± Cara build website (real case)
Kita buat:
-
Home
-
About
-
Blog
ποΈ Layout (Latte)
layout.latte
<html>
<head>
<title>{$title ?? 'My Site'}</title>
</head>
<body>
{include 'partials/navbar.latte'}
<main>
{block content}{/block}
</main>
</body>
</html>
home.latte
{extends 'layout.latte'}
{block content}
<h1>Home</h1>
{/block}
Controller
use Marko\Routing\Attributes\Get;
use Marko\View\ViewInterface;
use Marko\Routing\Http\Response;
class HomeController
{
public function __construct(
private ViewInterface $view
) {}
#[Get('/')]
public function index(): Response
{
return new Response(
$this->view->render('home.latte')
);
}
}
π§© Komponen (section landing page)
Partial
<section>
<h1>{$title}</h1>
</section>
Use:
{include 'components/hero.latte', title: 'Hello'}
Component class
class HeroComponent
{
public function render(): array
{
return [
'title' => 'Build Faster'
];
}
}
π° Blog system (proper way)
Controller
class BlogController
{
public function __construct(
private ViewInterface $view,
private PostRepository $posts
) {}
#[Get('/blog')]
public function index(): Response
{
return new Response(
$this->view->render('blog/index.latte', [
'posts' => $this->posts->findAll()
])
);
}
#[Get('/blog/{slug}')]
public function show(string $slug): Response
{
$post = $this->posts->findOneBy(['slug' => $slug]);
return new Response(
$this->view->render('blog/show.latte', [
'post' => $post
])
);
}
}
β οΈ Frontend (ini real talk)
Marko tak ada:
-
Livewire
-
Inertia
-
Vite setup
π Kau kena decide sendiri
3 Cara buat frontend
1. SSR + HTMX
<script src="https://unpkg.com/htmx.org"></script>
<button hx-get="/api/posts" hx-target="#list">
Load
</button>
2. React/Vue + API
#[Get('/api/posts')]
public function index(): JsonResponse
{
return new JsonResponse(
$this->posts->findAll()
);
}
3. DIY Inertia
return new JsonResponse([
'component' => 'Home',
'props' => [
'posts' => $posts
]
]);
π₯ Apa yang aku suka
-
modular architecture
-
database design clean (entity-driven)
-
scalable untuk SaaS
-
override system padu
π¬ Apa yang aku tak suka
- learning curve sikit tinggi
- tak banyak ecosystem lagi
- frontend kena setup sendiri
- modular bermaksud banyak kena setup
π§ Conclusion (founder angle)
Laravel:
-
cepat build
-
banyak tools
Marko:
-
long-term architecture
-
reusable modules
-
suitable untuk productize system
π Siapa patut guna Marko
Kalau kau:
-
nak bina SaaS
-
nak jual sistem
-
nak modular system
π Marko memang ngam
Kalau kau:
-
nak MVP cepat
-
nak CRUD simple
π Laravel lagi senang
π‘ Insight aku
Ini bukan sekadar framework.
Ini direction baru.
π Entity = schema
π Module = product
π Override = flexibility
Kalau kau start awal:
kau boleh build:
-
blog module
-
landing page module
-
agent system module
dan reuse semua.
Kalau aku sekarang:
aku akan guna Marko untuk:
-
system yang nak jual
-
system yang nak reuse banyak kali
bukan untuk semua project.
try framework ni: Marko PHP Framework
