Laravel使用Sweetalert v2时alert()辅助函数的替代方法
Laravel 中 SweetAlert v2 控制器调用报错解决方案
报错原因
SweetAlert v1 版本的 Laravel 适配包默认注册了全局alert()辅助函数,v2 版本默认未自动加载该全局函数,直接调用就会触发 Call to undefined function App\Http\Controllers\Admin\alert() 报错。
正确调用方法
两种方案任选其一即可:
方案1:使用 Facade 门面调用(推荐,无需额外配置)
在控制器头部引入对应门面:
use Alert;
方法内直接调用对应提示方法即可,和原有写法逻辑一致:
public function update(Request $request, User $user) { // 原有业务处理逻辑 Alert::success('Process is done'); // 其他提示类型可直接替换方法名:error、warning、info、question等 return redirect()->back(); }
方案2:恢复全局alert()辅助函数(适配v1使用习惯)
如果想完全沿用v1版本alert()->success()的写法,可手动注册全局辅助函数:
- 在
app目录下新建Helpers.php文件,写入函数定义:<?php if (!function_exists('alert')) { function alert($content = null, $title = '') { $alertInstance = app('alert'); if (!is_null($content)) { return $alertInstance->message($content, $title); } return $alertInstance; } } - 打开根目录
composer.json,在autoload配置段新增files加载项:"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/Helpers.php" ] } - 命令行执行重载自动加载命令:
配置完成后即可直接在控制器中使用v1版本的写法调用,不会再触发未定义函数报错。composer dump-autoload
必要配置
不管用哪种方案,都需要在全局blade布局文件的</body>标签前加入前端渲染代码,否则弹窗无法正常显示:
{!! Alert::render() !!}
注意:提示消息设置完成后,必须返回重定向或者视图响应,直接返回JSON等接口响应无法触发session中的消息渲染。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

