laravel-admin必须严格按三步安装:先验证Laravel环境与数据库连接正常,再执行composer require并vendor:publish生成admin.php配置,最后运行admin:install建表并初始化管理员;跳过任一步均会导致报错或登录后空白。

laravel-admin 不能“优雅”安装——它必须按顺序、分三步走,跳过任何一步都会卡在 php artisan admin:install 报错或登录后空白。
确认 Laravel 环境和数据库连接再动手
很多人卡在 php artisan admin:install 报 SQL 错误或 404,根本原因不是 laravel-admin 本身,而是 Laravel 底层没跑通。必须先验证:
-
php artisan tinker能进交互式终端,说明 Laravel 核心加载正常 -
php artisan db:wipe --force && php artisan migrate能成功执行,证明.env里DB_DATABASE、DB_USERNAME、DB_PASSWORD全对,且 MySQL/SQLite 可写 - 如果用 MySQL 且版本 ≥ 5.7.7 或 MariaDB ≥ 10.2.2,跳过
Schema::defaultStringLength(191);否则必须在app/Providers/AppServiceProvider.php的boot()方法里加这一行,否则建表时爆Specified key was too long
composer require encore/laravel-admin 后必须立刻 vendor:publish
这一步不是可选的“发布资源”,而是让 laravel-admin 注册服务提供者、生成 config/admin.php 和前端静态文件路径的关键动作。常见错误:
- 漏掉
--provider="EncoreAdminAdminServiceProvider"参数,导致命令没生效,config/admin.php根本不生成 - 运行了
vendor:publish但没指定 provider,结果发布了别的包的配置,admin.php依然缺失 - 发布后改过
config/admin.php里的'prefix'(比如改成'backend'),但没清缓存,访问/backend仍是 404 —— 必须补上php artisan config:cache
admin:install 失败时优先查 migrations 和权限表
php artisan admin:install 实际干两件事:运行迁移建表 + 插入默认管理员。失败几乎都出在这两块:
- 报
SQLSTATE[42S01]: Base table or view already exists:说明admin_users等表已存在,但结构不全。不要手动删表,直接跑php artisan migrate:refresh --path=vendor/encore/laravel-admin/database/migrations - 报
Class 'EncoreAdminProvidersAdminServiceProvider' not found:vendor:publish没成功,检查是否拼错 provider 名称,注意是双反斜杠Encore\Admin\AdminServiceProvider(Windows 命令行里常需转义) - 登录页能打开但输
admin/admin提示“账号或密码错误”:不是密码错了,是admin_users表里password字段被其他 migration 改成varchar(255)以外的长度,导致 bcrypt 密文截断 —— 查下该字段实际长度是否为varchar(60)
中文界面不是改 locale 就完事
config/app.php 里设 'locale' => 'zh-CN' 只影响 Laravel 自带语言包,laravel-admin 的菜单、按钮、表单标签全存在数据库 admin_menu 表里,字段是 title 和 icon。所以:
- 首次安装后立刻进 phpMyAdmin 或 Adminer,把
admin_menu表里所有title字段从英文手工改成中文(比如Dashboard→仪表盘) - 后续新增菜单必须用中文写
$menu->title('用户管理'),不能依赖语言文件 - 想全局替换?可以写个 Artisan 命令批量更新
admin_menu.title,但别动uri和parent_id字段,否则导航树崩
最常被忽略的是:laravel-admin 的路由完全依赖数据库里的 admin_menu 记录,而不是 Laravel 的 routes/web.php。删错一条菜单记录,对应页面就 404,且没有任何提示。


















