【问题标题】:Laravel Voyager overwrite BREAD controllerLaravel Voyager 覆盖 BREAD 控制器
【发布时间】:2017-11-18 11:41:53
【问题描述】:

我已经开始使用 Voyager,但我遇到了控制器问题。

我在数据库中创建了一个名为 Progress 的新表,voyager 默认创建一个 BREAD 表单来浏览读取删除和添加项目。

我喜欢在用户添加新项目时将默认值放入字段中。我喜欢输入的默认值是 authentication user_id

我该怎么做?

谢谢。

【问题讨论】:

  • 你能覆盖包视图吗?我从来没有使用过 voyager,所以我只是在黑暗中拍摄,但如果你可以发布供应商文件并修改它们,你可以通过这种方式设置默认值。

标签: php laravel voyager


【解决方案1】:

您可以在 Voyager 之外完全做到这一点。

首先从添加表单中排除authentication_user_id(在 Voyager 的数据库界面中)。如果该字段不采用空值,您可以设置一些临时默认值,或修改您的迁移 - 以最方便的方式为准。

接下来创建一个model observer,然后使用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();
         }

    }

【讨论】:

    【解决方案2】:

    您可以通过为面包创建模型来做到这一点,如图所示

    为面包创建模型后,您可以创建一个名为 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 已保存在您的数据库表中。

    【讨论】:

      【解决方案3】:

      我认为您可以创建一个迁移来为该字段写入默认值

      【讨论】:

        【解决方案4】:

        您必须像这样将以下代码添加到模型中,

        //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() 函数中添加您的字段。

        【讨论】:

          猜你喜欢
          • 2020-10-07
          • 2019-06-15
          • 2018-05-30
          • 2021-07-05
          • 2019-07-26
          • 2020-12-12
          • 2020-05-15
          • 1970-01-01
          • 2019-09-13
          相关资源
          最近更新 更多