Laravel Backpack - 在页面保存前设置额外的属性
Laravel Backpack - Set extra attributes before page save
在我的 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',
];
在我的 store 函数中我有:
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 字段添加(= 设置)额外字段?
通过执行以下操作修复了它:
添加纬度和经度作为隐藏字段:
$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);
。
在 backpack 4.1 中,我通过以下方式解决了我的问题:
在我的控制器中覆盖存储方法,在请求中设置我的额外字段,然后调用背包存储方法
不要忘记添加包括背包特征
希望解决方案对某人有所帮助
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();
}
在我的 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',
];
在我的 store 函数中我有:
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 字段添加(= 设置)额外字段?
通过执行以下操作修复了它:
添加纬度和经度作为隐藏字段:
$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);
。
在 backpack 4.1 中,我通过以下方式解决了我的问题: 在我的控制器中覆盖存储方法,在请求中设置我的额外字段,然后调用背包存储方法 不要忘记添加包括背包特征 希望解决方案对某人有所帮助
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();
}