1. Go to this page and download the library: Download elisdn/yii2-composite-form library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
elisdn / yii2-composite-form example snippets
class MetaForm extends Model
{
public $title;
public $description;
public $keywords;
public function rules()
{
return [
[['title'], 'string', 'max' => 255],
[['description', 'keywords'], 'string'],
];
}
}
class ValueForm extends Model
{
public $value;
private $_characteristic;
public function __construct(Characteristic $characteristic, $config = [])
{
$this->_characteristic = $characteristic;
parent::__construct($config);
}
public function rules()
{
return [
['value', 'safe'],
];
}
public function attributeLabels()
{
return [
'value' => $this->_characteristic->name,
];
}
public function getCharacteristicId()
{
return $this->_characteristic->id;
}
}
use elisdn\compositeForm\CompositeForm;
/**
* @property MetaForm $meta
* @property ValueForm[] $values
*/
class ProductCreateForm extends CompositeForm
{
public $code;
public $name;
public function __construct($config = [])
{
$this->meta = new MetaForm();
$this->values = array_map(function (Characteristic $characteristic) {
return new ValueForm($characteristic);
}, Characteristic::find()->orderBy('sort')->all());
parent::__construct($config);
}
public function rules()
{
return [
[['code', 'name'], '
$form = ActiveForm::begin();
class ProductManageService
{
private $products;
public function __construct(ProductRepository $products)
{
$this->products = $products;
}
public function create(ProductCreateForm $form)
{
$product = Product::create(
$form->code,
$form->name,
new Meta(
$form->meta->title,
$form->meta->description,
$form->meta->keywords
)
);
foreach ($form->values as $valueForm) {
$product->changeValue($valueForm->getCharacteristicId(), $valueForm->value);
}
$this->products->save($product);
return $product->id;
}
...
}
class ProductController extends \yii\web\Controller
{
...
public function actionCreate()
{
$form = new ProductCreateForm();
if ($form->load(Yii::$app->request->post()) && $form->validate()) {
$id = $this->service->create($form);
return $this->redirect(['view', 'id' => $id]);
}
return $this->render('create', [
'model' => $form,
]);
}
}
class ProductController extends \yii\rest\Controller
{
...
public function actionCreate()
{
$form = new ProductCreateForm();
$form->load(Yii::$app->request->getBodyParams());
if ($form->validate()) {
$id = $this->service->create($form);
$response = Yii::$app->getResponse();
$response->setStatusCode(201);
$response->getHeaders()->set('Location', Url::to(['view', 'id' => $id], true));
return [];
}
return $form;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.