1. Go to this page and download the library: Download akbarali/view-model 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/ */
class OrganizationData extends \Akbarali\DataObject\DataObjectBase
{
public readonly ?int $id;
public ?string $name;
public ?int $inn;
public ?int $pinfl;
public ?string $description;
public int $is_type; // 1 - Qora ro`yhatdagilar, 2 - Oq ro`yhatdagilar
public Carbon $created_at; // Yaratilgan vaqti
}
public function index(string $type, Request $request): View
{
$filters = collect();
$filters->push(OrganizationTypeFilter::getFilter($type));
$dataObjectPagination = $this->paginate((int)$request->input('page', 1), 20, $filters);
return (new PaginationViewModel($dataObjectPagination, OrganizationViewModel::class))->toView('organization.index', compact('type'));
}
class OrganizationViewModel extends \Akbarali\ViewModel\BaseViewModel
{
public ?int $id;
public ?string $name;
public ?int $inn;
public ?int $pinfl;
public ?string $description;
public int $is_type;
public ?string $created_at;
public ?string $hDate;
protected DataObjectBase|OrganizationData $_data;
public function populate(): void
{
$this->hType = $this->getHType();
$this->hDate = $this->_data->created_at->format('d.m.Y H:i');
}
public function getHType(): string
{
return match ($this->is_type) {
1 => "Qora ro`yhatdagilar",
2 => "Oq ro`yhatdagilar",
default => "Noma`lum",
};
}
}
public function getOrganization(int $id): OrganizationData
{
/** @var OrganizationModel $item */
$item = OrganizationModel::query()->find($id);
if (!$item) {
throw new OperationException("Organization not found");
}
return OrganizationData::createFromEloquentModel($item);
}
public function edit(string $type, int $id): View
{
$orgData = $this->getOrganization($id);
$viewModel = new OrganizationViewModel($orgData);
return $viewModel->toView('organization.store', compact('type'));
}