NativePHP brings Laravel’s power to the desktop — and guess what? Your familiar routes and views still play a huge role. In this post, we'll break down how routing and views work inside a NativePHP application and how you can structure them to build a polished, native-like experience.
🧠 The Core Idea
Even though you’re building a desktop application, NativePHP runs a Laravel application in the background — just like you would on the web. The Electron shell opens a window and points to a local Laravel server, usually something like http://localhost:8000
.
What this means:
All your Laravel routing logic remains the same.
📁 Setting Up Routes in NativePHP
Routes in NativePHP are handled using Laravel’s standard route files, typically found in:
routes/web.php
routes/api.php
Example: Basic Route Setup
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/dashboard', function () {
return view('dashboard');
});
When you call Window::open('/')
in NativePHP, it loads the root route (/
) from your Laravel backend — just like a browser would.
🪟 Loading a View in a NativePHP Window
Inside your MainWindow.php
(or any other NativePHP window class), you can define what route the window should load:
use Native\Laravel\Facades\Window;
public function launch(): void
{
Window::open()
->title('My First NativePHP App')
->url('/') // This hits your Laravel route
->width(1000)
->height(700);
}
This means your Laravel view (like welcome.blade.php
) will be rendered inside a native window. Super cool, right?
🔄 Dynamic Views and Data
You can pass data to your views just like in a normal Laravel app.
Route::get('/profile', function () {
return view('profile', [
'user' => Auth::user(),
]);
});
And then use the data inside your Blade view:
<h1>Welcome, {{ $user->name }}</h1>
🔁 Navigating Between Views
Since Electron wraps your Laravel app in a Chromium window, navigation works like a standard web browser. You can:
-
Use anchor tags (
<a href="/settings">
) -
Use Inertia.js or Vue Router for SPA-like behavior
-
Handle redirects inside your controllers
You can even use window.location.href = '/some-route'
in JavaScript.
🎯 Tips for Desktop-Like Experience
To make the UI feel more native:
-
Avoid full-page reloads — consider using Inertia.js or Livewire
-
Use custom Electron menus and tray icons with NativePHP
-
Keep transitions smooth and instant
-
Disable back/forward navigation if unnecessary
🔐 Route Protection & Middleware
You can still use middleware, authentication, and role-based access just like a web app.
Route::middleware('auth')->group(function () {
Route::get('/dashboard', function () {
return view('dashboard');
});
});
Login sessions are stored locally, so users don’t need to connect to a remote server unless your app requires it.
🧪 Localhost Server Behavior
Behind the scenes:
-
NativePHP runs Laravel on a local development server.
-
Electron opens a window that hits this server via HTTP.
-
Laravel renders the view → Electron shows it in a native shell.
So yes, it’s technically a web view, but with native power, menus, and integrations.
🧰 Tools to Supercharge Your Views
Here are a few optional tools to make things snappy:
-
✅ Inertia.js — for SPA-style routing and state management.
-
✅ Vue.js or React — for component-based UI.
-
✅ Tailwind CSS — for fast, responsive styling.
-
✅ Livewire — if you want reactive behavior with PHP.
🧠 Summary
Feature | Behavior in NativePHP |
---|---|
Routes | Laravel’s normal routes/web.php |
Views | Blade, Inertia, Vue, etc. |
Navigation | Works like web app (hrefs, SPA, etc.) |
Middleware | Fully supported |
Authentication | Fully supported |
Frontend Framework | Use any: Vue, React, Alpine, etc. |
0 Comments