我已经开始使用 Voyager,但我遇到了控制器问题。
我在数据库中创建了一个名为 Progress 的新表,voyager 默认创建一个 BREAD 表单来浏览 read delete 和 add items 。
当用户添加新项目时,我喜欢将默认值放入字段中。我喜欢输入的默认值是 authentication user_id
我怎样才能做到这一点?
谢谢。
您可以在 Voyager 之外完全做到这一点。
首先从添加表单中排除authentication_user_id
(在 Voyager 的数据库界面中)。如果该字段不采用空值,您可以设置一些临时默认值,或修改您的迁移 - 以最方便的为准。
接下来创建一个模型观察者,然后使用该created()
功能。例如:
<?php
namespace App\Observers;
use App\Models\Project;
class ProgressObserver
{
/**
* Listen to the Progress created event.
*
* @param Progress $progress
* @return void
*/
public function created(Progress $progress)
{
$progress->authentication_user_id = WHATEVER_YOU_DO_HERE;
$progress->save();
}
}
为面包创建模型后,您可以创建一个名为save
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use TCG\Voyager\Traits\Translatable;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Auth;
class MyViewModel extends Model
{
//
protected $table = "my_view";
public function save(array $options = [])
{
$this->user_id = \Auth::user()->id;
parent::save();
}
}
现在,每当您在 voyager 管理中保存任何记录时,您都会看到当前登录用户 ID 已保存在您的数据库表中。
我认为您可以创建一个迁移来为该字段写入默认值
您必须像这样将以下代码添加到模型中,
//assign created_by loggedin user
public function __construct(array $attributes = [])
{
$this->creating([$this, 'onCreating']);
parent::__construct($attributes);
}
public function onCreating($row)
{
// Placeholder for catching any exceptions
if (!\Auth::user()->id) {
return false;
}
$row->setAttribute('created_by', \Auth::user()->id);
$row->setAttribute('assign_to', \Auth::user()->id);
}
我添加了这个,因为我的项目需要这个。您还可以在 onCreating() 函数中添加您的字段。