laravel/ui
Legacy Laravel package for Bootstrap/Vue/React frontend and simple auth scaffolding. Install via Composer, then run php artisan ui {bootstrap|vue|react} [--auth] to generate UI and login/registration scaffolds. Consider Breeze or Jetstream for new apps.
Installation:
composer require laravel/ui
Generate Basic Scaffolding:
php artisan ui bootstrap
Install Dependencies:
npm install && npm run dev
First Use Case:
app.blade.php (Bootstrap) or app.js (Vue/React) as a starting point for your frontend.app.blade.php in your layout:
@extends('layouts.app')
resources/views/auth/ (for auth scaffolding) and resources/views/layouts/.resources/js/app.js (Vue/React entry point).resources/sass/app.scss (Bootstrap SASS variables and imports).vite.config.js (asset compilation settings).Authentication Scaffolding:
php artisan ui bootstrap --auth
Frontend Framework Integration:
app.js:
import ExampleComponent from './components/ExampleComponent.vue';
Vue.component('example-component', ExampleComponent);
createRoot (React 18) in app.js:
import { createRoot } from 'react-dom/client';
import App from './App';
createRoot(document.getElementById('app')).render(<App />);
Customizing Auth Views:
resources/views/auth/ (e.g., login.blade.php).app/Http/Controllers/Auth/ (e.g., LoginController.php).Asset Workflow:
npm run dev to compile assets on-demand.npm run build for optimized assets.@vite() Blade directive for asset injection:
@vite(['resources/sass/app.scss', 'resources/js/app.js'])
Bootstrap + Vue/React Hybrid:
Modular Frontend:
app.js into smaller modules (e.g., auth.js, dashboard.js).const { default: Dashboard } = await import('./components/Dashboard.vue');
Shared Layouts:
resources/views/layouts/app.blade.php for consistent headers/footers.@include('partials.navbar')).mix-manifest.json references with Vite’s dynamic imports:
<script type="module" src="@vite('resources/js/app.js')"></script>
app.scss and package.json:
npm install -D tailwindcss postcss autoprefixer
axios.post('/login', { email, password });
Asset Compilation Issues:
public/build is symlinked or configured in vite.config.js:
build: {
outDir: 'public/build',
}
@viteReactRefresh for React.Auth Controller Conflicts:
LoginController may break auth scaffolding. Use php artisan ui:auth to regenerate views/controllers.Vue/React Version Mismatches:
package.json versions match Laravel UI’s defaults (e.g., Vue 3, React 18).@vitejs/plugin-vue@4.x with Laravel 12+ (use @vitejs/plugin-vue@3.x if needed).CSRF Token in API Requests:
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;
Vite Errors:
npm run dev -- --clear
vite.config.js for misconfigured plugins (e.g., @vitejs/plugin-react).Blade Template Issues:
@vite() directives are placed after opening <body> tags.{{ dump($errors) }} in Blade templates.Auth Redirect Loops:
auth:verify middleware is not misconfigured in app/Http/Kernel.php.session() driver in .env (e.g., SESSION_DRIVER=file).// vite.config.js
server: {
hmr: process.env.NODE_ENV === 'development',
}
resources/sass/app.scss:
$primary: #3490dc;
@import "bootstrap/scss/bootstrap";
webpack.mix.js to Vite by removing it and using vite.config.js.Custom Presets:
UiCommand in a service provider:
UiCommand::macro('tailwind', function () {
// Scaffold Tailwind setup
});
php artisan ui tailwind
Dynamic Component Loading:
$app->singleton('vue-components', function () {
return collect([
'example' => ExampleComponent::class,
]);
});
API Resource Transformers:
app/Http/Controllers/Auth/RegisteredUserController.php:
protected function registered(Request $request, $user) {
return response()->json(['data' => $user]);
}
data-bs-theme="dark" or CSS variables.const Home = () => import('./components/Home.vue');
actingAs() with Vue/React tests:
test('login', async () => {
await actingAs(User::factory()->create());
// Test Vue/React behavior
});
How can I help you explore Laravel packages today?