Laravel Backpack - 在页面保存之前设置额外属性

时间:2017-11-18 11:31:05

标签: php laravel laravel-5 crud backpack-for-laravel

在我的 PageTemplates.php 中,我有一个这样的字段:

$this->crud->addField([
    'name' => 'adres',
    'label' => 'Adres',
    'type' => 'address',
    'fake' => true,
]);

现在我想保存他们提供的地址的纬度经度(如果可以找到)。我复制了 PageCrudController 并将 config / backpack / pagemanager.php 中的配置更改为:

return [
    'admin_controller_class' => 'App\Http\Controllers\Admin\PageCrudController',
    'page_model_class'       => 'App\Models\Page',
];

在我的商店功能中,我有:

public function store(StoreRequest $request)
{
    $address = $request->request->get('adres');
    $addressObj = app('geocoder')->geocode($address)->get()->first();

    if($addressObj)
    {

    }

    $this->addDefaultPageFields(\Request::input('template'));
    $this->useTemplate(\Request::input('template'));

    return parent::storeCrud();
}

但是我在if语句中放置了什么?如何在数据库的extras字段中添加(=设置)额外字段?

2 个答案:

答案 0 :(得分:1)

在背包4.1中,我通过以下方式解决了我的问题: 覆盖控制器中的store方法,在请求中设置我的额外字段,然后调用背包store方法 别忘了添加include背包特征 希望该解决方案能对某人有所帮助

use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation { store as traitStore; }

public function store()
{
    $this->crud->setOperationSetting('saveAllInputsExcept', ['save_action']);
    $this->crud->getRequest()->request->add(['updated_by' => backpack_user()->id]);     
        
    return $this->traitStore();
}

答案 1 :(得分:0)

通过执行以下操作来修复它:

将纬度和经度添加为隐藏字段:

$this->crud->addField([
    'name' => 'latitude',
    'type' => 'hidden',
    'fake' => true,
]);

$this->crud->addField([
    'name' => 'longitude',
    'type' => 'hidden',
    'fake' => true,
]);

通过执行以下操作设置属性:

if($addressObj)
    {
        $request['latitude'] = $addressObj->getCoordinates()->getLatitude();
        $request['longitude'] = $addressObj->getCoordinates()->getLongitude();
    }
}

parent::updateCrud更改为parent::updateCrud($request);