PHP code example of vasichmen / laravel-foundation
1. Go to this page and download the library: Download vasichmen/laravel-foundation 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/ */
vasichmen / laravel-foundation example snippets
use Laravel\Foundation\Abstracts\AbstractAppServiceProvider;
class AppServiceProvider extends AbstractAppServiceProvider
{
protected array $modelList = [
User::class, //репозитории подключатся по классам моделей из App\Repositories как singleton, будут доступны через app(UserRepository::class)
];
protected array $serviceList = [
AuthService::class, //сервисы подключаются как singleton и доступны через app(AuthService::class)
];
}
use Laravel\Foundation\Abstracts\AbstractBasicAuthMiddleware;
class ExternalApiAuthMiddleware extends AbstractBasicAuthMiddleware
{
protected string $key = 'external_api';
}
use App\DTO\Requests\RefreshTokenRequestDTO;
use Laravel\Foundation\Abstracts\AbstractRequest;
class RefreshTokenRequest extends AbstractRequest
{
use \Laravel\Foundation\Traits\RequestSortable;
protected ?string $dtoClassName = RefreshTokenRequestDTO::class;
public function rules()
{
return [
'some_long_parameter' => '
use Laravel\Foundation\Abstracts\AbstractDto;
class RefreshTokenRequestDTO extends AbstractDto
{
public string $someLongParameter;
public array $sort;
public int $page;
public int $perPage;
}
class RefreshTokenRequestDTO extends AbstractDto
{
protected function parseData(array $data, bool $throwIfNoProperty = true): void
{
parent::parseData($data, false);
}
}
class User extends \Laravel\Foundation\Abstracts\AbstractModel
{
...
// Можно переопределить метод сброса кастомного кэша
// Метод вызывается при обновлении/удалении модели, в нем надо определить сброс кэша по кастомным тегам
public static function invalidateCustomCache(AbstractModel $user): void
{
/** @var User $user */
Cache::tags(['tag_1','tag_2'])
->forget(self::getCacheKey('some key data'));
}
}
UserRepository::query()
->filters(['code'=>'code_1','count'=>1])
->query('query string',['column1','column2']) //поисковый запрос по определенным столбцам
->cacheFor(config('cache.ttl')) //длительность хранения кэша
->orderBy(['name'=>'asc','id'=>'desc'])
->with(['roles']) //загрузка отношений
->withCount(['subscribers']) //получение числа связанных объектов
->get(); //полная выборка в виде Collection
UserRepository::query()
->filters(['code'=>'code_1', 'count'=>1]) //применение фильтров
->orderBy(['name'=>'asc',]) //сортировка по полю name по возрастанию
->limit(10) //10 элементов на странице
->offset(1) //первая страница
->paginate() //Возвращается LengthAwarePaginator
UserRepository::query()
->fromGetListDto($someGetListDto) //установка настроек из заданного объекта GetListRequestDTO
->paginate();
use Laravel\Foundation\Abstracts\AbstractResource;
class UserResource extends AbstractResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'login' => $this->login,
...$this->getEnum('information_processed')
...$this->getRelation('roles', RoleResource::class),
];
}
}
return new DataResultPresenter(
'bookmarks' => BookmarkResource::collection($bookmarkCollection),
);
return new DataResultPresenter([
'token' => new TokenResource($token),
'user' => new UserResource($user),
]);
return new PaginatedDataPresenter($lengthAwarePaginatedData, null, SomeModelResource::class);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.