我正在用Laravel 8开发一个博客应用程序。
我正准备将其部署在一个实时服务器上,我希望部署过程非常用户友好。
为此,我一直在开发一个"安装程序"。应用程序:
在routesweb.php
我有:
Route::get('/install', [InstallController::class, 'index']);
在appHttpControllersInstallController.php
中,我有这段代码,以便在没有用户表时运行迁移:
class InstallController extends Controller
{
public function index() {
if (!Schema::hasTable('users')) {
Artisan::call('migrate');
}
return redirect('/register')->with('success', 'Way to go! You can create an account.');
}
}
上面的代码工作了,创建了所有的表,并邀请(第一个)用户注册。
问题问题是我还没有找到一种方法,使控制器在成功创建表后运行数据库种子器。
我怎样才能以简单友好的方式达到这个目标?
您可以通过运行php artisan db:seed
或像Artisan::call('db:seed');
一样通过Artisan
facade来实现
你的代码将是:
class InstallController extends Controller
{
public function index() {
if (!Schema::hasTable('users')) {
Artisan::call('migrate');
Artisan::call('db:seed');
}
return redirect('/register')->with('success', 'Way to go! You can create an account.');
}
}
来源:https://laravel.com/docs/9.x/seeding running-seeders
但是,我建议不要走这条路,而是创建部署脚本来为您完成所有这些工作。这样一来,你就把这条路由暴露给了所有将要使用该应用程序的用户,恶意用户就可以利用它。