Um repositório com classes, interfaces para padronizar os projetos de PHP da empresa

Overview

php-utils

PHP Utilities for Laravel/Lumen

Installation

cd /path/to/your/project
composer require logcomex/php-utils

Utilities Packages

  • Contracts
  • Exceptions
  • Functionalities
  • Handlers
  • Helpers
  • Loggers
  • Logs
  • Middlewares
  • Providers
  • Singletons

Contracts

Have all the contracts (interfaces) used by the php-utils classes and other that you can use in your project.

Exceptions

Have all the exceptions used by the php-utils classes. And others that you can use in your project to segregate your errors types .

ApiException

You can use for all exceptions in 400 range http code

ApiException(string $token,
			string $message, 
			int $httpCode = Response::HTTP_BAD_REQUEST, 
			Exception $previous = null)  
Visibility Function Return Type
public getHttpCode int
public getToken string
public __toString string
public toArray array
public toJson string

BadImplementationException

This exception means that a situation has been overlooked or incorrectly done by the developer.

BadImplementationException(string $token,
            string $message,
			int $httpCode = Response::HTTP_INTERNAL_SERVER_ERROR, 
			Exception $previous = null)  
Visibility Function Return Type
public getHttpCode int
public getToken string
public __toString string
public toArray array
public toJson string

SecurityException

This exception serves to point out some security problem in your application.

SecurityException(string $token,
			string $message, 
			int $httpCode = Response::HTTP_FORBIDDEN, 
			Exception $previous = null)  
Visibility Function Return Type
public getHttpCode int
public getToken string
public __toString string
public toArray array
public toJson string

UnavailableServiceException

This exception serves to point out that your or other application is unavailable.

UnavailableServiceException(string $token,
			string $message, 
			int $httpCode = Response::HTTP_FORBIDDEN, 
			Exception $previous = null)  
Visibility Function Return Type
public getHttpCode int
public getToken string
public getService string
public __toString string
public toArray array
public toJson string

Functionalities

They're a pack of traits that can be useful in your code

PropertiesExporterFunctionality

You can use this functionality to export an array with you class properties

public static function properties(): array  

PropertiesAttacherFunctionality

You can use this functionality to attach in your class properties the values passed in the parameter.

Note: To uses this functionality, you need use the PropertiesExporterFunctionality in the class.

public function attachValues(array $values): void
Exception Reason
BadImplementationException When you don't use PropertiesExporterFunctionality

ValuesExporterToArrayFunctionality

You can use this functionality to easily get all the properties of class in an array.

Note: To uses this functionality, you need to do two things:

  1. The class must implement Illuminate\Contracts\Support\Arrayable.
  2. The class must use PropertiesExporterFunctionality.
public function toArray()  
Exception Reason
BadImplementationException When yout don't implement the the Arrayable contract
BadImplementationException When you don't use PropertiesExporterFunctionality

ValuesExporterToJsonFunctionality

You can use this functionality to easily get all the properties of class in a Json.

Note: To uses this functionality, you need to do two things:

  1. The class must implement Illuminate\Contracts\Support\Jsonable.
  2. The class must use PropertiesExporterFunctionality.
public function toJson()  
Exception Reason
BadImplementationException When yout don't implement the the Jsonable contract
BadImplementationException When you don't use PropertiesExporterFunctionality

Helpers

They're a pack of Helpers classes and traits.

EnumHelper

It's a trait that provide some utilities to your Enumerators classes.

Visibility Function Return Type Purpose
public all array Get all the constants of your Enumerator
use Logcomex\PhpUtils\Helpers\EnumHelper;

class ProductEnum
{
	user EnumHelper;
	public const EXAMPLE = 'example';
	public const EXAMPLE2 = 'example2';
}

$allProducts = ProductEnum::all();

Loggers

The idea of this package is provide all the Loggers classes.

LogcomexLogger

Using this class you can easily provide a log template, that is very important to integrate with Datadog.

// bootstrap/app.php

$app->register(Logcomex\PhpUtils\Providers\LogcomexLoggerProvider::class);

$app->withFacades(true, [
    Logcomex\PhpUtils\Facades\Logger::class => 'Logger',
]);

Logger::info('TOKEN-001', ['reason' => 'test',]);

Middlewares

They're a pack of Middleware classes.

AuthenticateMiddleware

It is a class that provides authentication verification. You'll need a AuthProvider configured in your application to use this Middleware.

// bootstrap/app.php
$app->register(Your\Provider\AuthServiceProvider::class);

// Using in global mode
$app->middleware([
    Logcomex\PhpUtils\Middlewares\AuthenticateMiddleware::class,
]);

// Or, by specific route
$app->routeMiddleware([
    'auth' => Logcomex\PhpUtils\Middlewares\AuthenticateMiddleware::class,
]);

RequestLogMiddleware

It is a class that provides a log for each request in your api. You can choose what you gonna print in the log, such as: request-header, request-server, request-payload, response-header, response-content, response-time, and trace-id.

The .env configuration:

Env Variable Type Description
REQUEST_LOGGER_ENABLE_REQUEST_HEADER boolean Print in the log, the request header information
REQUEST_LOGGER_ENABLE_REQUEST_SERVER boolean Print in the log, the request server information
REQUEST_LOGGER_ENABLE_REQUEST_PAYLOAD boolean Print in the log, the request payload information
REQUEST_LOGGER_ENABLE_RESPONSE_HEADER boolean Print in the log, the response header information
REQUEST_LOGGER_ENABLE_RESPONSE_CONTENT boolean Print in the log, the response content information
REQUEST_LOGGER_ENABLE_RESPONSE_TIME boolean Print in the log, the response execution time information
REQUEST_LOGGER_ALLOWED_DATA_REQUEST_SERVER string If has data in this variable, the middleware gonna print just the infos requested in this setting
// config/requestLog.php
return [
    'enable-request-header' => env('REQUEST_LOGGER_ENABLE_REQUEST_HEADER', true),
    'enable-request-server' => env('REQUEST_LOGGER_ENABLE_REQUEST_SERVER', true),
    'enable-request-payload' => env('REQUEST_LOGGER_ENABLE_REQUEST_PAYLOAD', true),
    'enable-response-header' => env('REQUEST_LOGGER_ENABLE_RESPONSE_HEADER', true),
    'enable-response-content' => env('REQUEST_LOGGER_ENABLE_RESPONSE_CONTENT', true),
    'enable-response-time' => env('REQUEST_LOGGER_ENABLE_RESPONSE_TIME', true),
    'allowed-data-request-server' => explode(';', env('REQUEST_LOGGER_ALLOWED_DATA_REQUEST_SERVER', '')),
];


// bootstrap/app.php
$app->configure('requestLog');

// Using in global mode
$app->middleware([
    Logcomex\PhpUtils\Middlewares\TracerMiddleware::class, // If you gonna use tracer, it must be above the requestlog
    Logcomex\PhpUtils\Middlewares\RequestLogMiddleware::class, // And after trace, you need the request log
]);

ResponseTimeLogMiddleware

It is a class that registers the response time of each request in your api. You can choose what request will be measured through calling the middleware by route.

First of all, you have to define the framework start time globally before requiring anything in your bootstrap:

// bootstrap/app.php
if (!defined('GLOBAL_FRAMEWORK_START')) {
    define('GLOBAL_FRAMEWORK_START', microtime(true));
}

Configuration:

Your app config has to contain the key 'api-name', which will be used by this middleware for identifying what API the response time belongs to.

// bootstrap/app.php
$app->configure('app');

Usage:

It is IMPORTANT that you call this middleware as the first one, so the response time calc can be the most accurate as possible.

// Using in global mode
$app->middleware([
    Logcomex\PhpUtils\Middlewares\ResponseTimeLogMiddleware::class,
]);

// Using in specific routes
$app->routeMiddleware([
    'response-time-log' => Logcomex\PhpUtils\Middlewares\ResponseTimeLogMiddleware::class,
]);
Route::group(
    [
        'prefix' => 'example',
        'middleware' => ['response-time-log'],
    ],
    function () {
        Route::get('responseTimeLog', 'ExampleClassName@exampleMethodName');
    });

TracerMiddleware

It is a class that provides tracer functionality for your api. So your log can use this value and the HttpHelper. You must create a tracer config file in config folder. We recommend uses this middleware as global, and the first one in middlewares chain.

// config/tracer.php
return [
    'headersToPropagate' => explode(';', env('TRACER_HEADERS_TO_PROPAGATE')),
];


// bootstrap/app.php
$app->configure('tracer');

// Using in global mode
$app->middleware([
    Logcomex\PhpUtils\Middlewares\TracerMiddleware::class,
    // the other middlewares
]);

// Or, by specific route
$app->routeMiddleware([
    'tracer' => Logcomex\PhpUtils\Middlewares\TracerMiddleware::class,
]);

AccreditedApiKeysMiddleware

It is a class that provides a first level of security for your api. The best analogy is that middleware is your "API guest list".

You need to register a configuration file called accreditedApiKeys, with all the api-keys that can request your api.

Therefore, if the request does not contain the x-infra-key header or a allowed value, the API denies the request with the security exception.

It is recommended to use as a global middleware, and if you need to avoid this middleware for some routes, just insert into the public route group.

// config/accreditedApiKeys.php
return [
    'api-1' => env('API_1_X_API_KEY'),
    'api-2' => env('API_2_X_API_KEY'),
    'api-3' => env('API_3_X_API_KEY'),
];


// bootstrap/app.php
$app->configure('accreditedApiKeys');

// Using in global mode
$app->middleware([
    Logcomex\PhpUtils\Middlewares\AccreditedApiKeysMiddleware::class,
]);


// routes/api.php
$router->group(['prefix' => 'public',], function () use ($router) {
    $router->get('test', 'Controller@test');// this route does not need x-infra-key validation
});

Providers

The idea of this package is provide some providers. For a better understanding: Lumen Providers

LogcomexLoggerProvider

You have to use this provider when you're using the Logger Facade.

// bootstrap/app.php

$app->register(Logcomex\MicroservicesCore\Providers\LogcomexLoggerProvider::class);

## Singletons  

> They're a pack of Singleton classes.

#### TracerSingleton

> It is a class that provides the tracer value.

## Unit Tests Coverage

Master <br>
[![codecov](https://codecov.io/gh/comexio/php-utils/branch/master/graph/badge.svg)](https://codecov.io/gh/comexio/php-utils)

## TODO

 - [ ] HttpHelper Doc
 - [ ] TokenHelper Doc
 - [ ] Handlers Package Doc
	 - [ ] ExceptionHandler Doc
 - [ ] Logs Package Doc
	 - [ ] RequestLog Doc
 - [ ] Middlewares Package Doc
	 - [ ] AllowedHostsMiddleware Doc
	 - [ ] CorsMiddleware Doc

## Contributing  
  
- Open an issue first to discuss potential changes/additions.
- Open a pull request, you need two approvals and tests need to pass Travis CI.
Comments
  • Bump phpunit/phpunit from 8.5.8 to 8.5.30

    Bump phpunit/phpunit from 8.5.8 to 8.5.30

    Bumps phpunit/phpunit from 8.5.8 to 8.5.30.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.30] - 2022-09-25

    Changed

    • The configuration generator now asks for a cache directory

    Fixed

    • #4913: Failed assert() should show a backtrace
    • #4966: TestCase::assertSame() (and related exact comparisons) must compare float exactly

    [8.5.29] - 2022-08-22

    Changed

    • #5033: Do not depend on phpspec/prophecy

    [8.5.28] - 2022-07-29

    Fixed

    • #5015: Ukraine banner unreadable on black background
    • #5016: PHPUnit 8.5.27 does not work on PHP 7.2.0-7.2.18 and PHP 7.3.0-7.3.5

    [8.5.27] - 2022-06-19

    Fixed

    • #4950: False error on atMost() invocation rule without call
    • #4962: Ukraine banner unreadable on white background

    [8.5.26] - 2022-04-01

    Fixed

    • #4938: Test Double code generator does not handle void return type declaration on __clone() methods

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    ... (truncated)

    Commits
    • 4fd448d Prepare release
    • 0869792 Fix: Run 'tools/php-cs-fixer fix'
    • 2b5cb60 Enhancement: Enable and configure native_function_invocation fixer
    • 63bd717 Enhancement: Enable no_unneeded_import_alias fixer
    • fe26cfb Enhancement: Use no_trailing_comma_in_singleline instead of deprecated fixers
    • b65739c Add Security Policy
    • ff93de1 Update tools
    • da25141 Fix lowest deps for GH-4972
    • 28183e8 Update ChangeLog
    • b439136 Drop comparison /w PHP_FLOAT_EPSILON
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump mockery/mockery from 1.3.3 to 1.3.6

    Bump mockery/mockery from 1.3.3 to 1.3.6

    Bumps mockery/mockery from 1.3.3 to 1.3.6.

    Release notes

    Sourced from mockery/mockery's releases.

    1.3.6

    PHP 8.2 | Fix "Use of "parent" in callables is deprecated" notice #1169

    1.3.5

    • Fix auto-generated return values with union types #1143
    • Adds support for tentative types #1130
    • Fixes for PHP 8.1 Support (#1130 and #1140)

    1.3.4

    • Fixes calls to fetchMock before initialisation #1113
    • Fix crash on a union type including null #1106
    Changelog

    Sourced from mockery/mockery's changelog.

    1.3.6 (2022-09-07)

    • PHP 8.2 | Fix "Use of "parent" in callables is deprecated" notice #1169

    1.5.1 (2022-09-07)

    • [PHP 8.2] Various tests: explicitly declare properties #1170
    • [PHP 8.2] Fix "Use of "parent" in callables is deprecated" notice #1169
    • [PHP 8.1] Support intersection types #1164
    • Handle final __toString methods #1162

    1.5.0 (2022-01-20)

    • Override default call count expectations via expects() #1146
    • Mock methods with static return types #1157
    • Mock methods with mixed return type #1156
    • Mock classes with new in initializers on PHP 8.1 #1160
    • Removes redundant PHPUnitConstraint #1158

    1.4.4 (2021-09-13)

    • Fixes auto-generated return values #1144
    • Adds support for tentative types #1130
    • Fixes for PHP 8.1 Support (#1130 and #1140)
    • Add method that allows defining a set of arguments the mock should yield #1133
    • Added option to configure default matchers for objects \Mockery::getConfiguration()->setDefaultMatcher($class, $matcherClass) #1120

    1.3.5 (2021-09-13)

    • Fix auto-generated return values with union types #1143
    • Adds support for tentative types #1130
    • Fixes for PHP 8.1 Support (#1130 and #1140)
    • Add method that allows defining a set of arguments the mock should yield #1133
    • Added option to configure default matchers for objects \Mockery::getConfiguration()->setDefaultMatcher($class, $matcherClass) #1120

    1.4.3 (2021-02-24)

    • Fixes calls to fetchMock before initialisation #1113
    • Allow shouldIgnoreMissing() to behave in a recursive fashion #1097
    • Custom object formatters #766 (Needs Docs)
    • Fix crash on a union type including null #1106

    1.3.4 (2021-02-24)

    • Fixes calls to fetchMock before initialisation #1113
    • Fix crash on a union type including null #1106

    1.4.2 (2020-08-11)

    • Fix array to string conversion in ConstantsPass (#1086)
    • Fixed nullable PHP 8.0 union types (#1088, #1089)
    • Fixed support for PHP 8.0 parent type (#1088, #1089)

    ... (truncated)

    Commits
    • dc206df Adds note to changelog
    • a60f28f Merge pull request #1169 from jrfnl/feature/1168-fix-php-8.2-error-callables
    • f09b080 PHP 8.2: fix "Use of "parent" in callables is deprecated" notice
    • 472fa8c Adds a couple of notes
    • 553ad47 Merge pull request #1143 from GrahamCampbell/13-fix-union-return
    • b2b3b0e Fix auto-generated return values with union types
    • 6be9039 Merge pull request #1140 from GrahamCampbell/php81-fixes
    • 2bbc2b1 Update .gitattributes
    • 9ee64d6 More fixes for PHP 8.1 and setup CI again
    • 0a999ca Merge pull request #1130 from jrmajor/tentative-types
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.29

    Bump phpunit/phpunit from 8.5.8 to 8.5.29

    Bumps phpunit/phpunit from 8.5.8 to 8.5.29.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.29] - 2022-08-22

    Changed

    • #5033: Do not depend on phpspec/prophecy

    [8.5.28] - 2022-07-29

    Fixed

    • #5015: Ukraine banner unreadable on black background
    • #5016: PHPUnit 8.5.27 does not work on PHP 7.2.0-7.2.18 and PHP 7.3.0-7.3.5

    [8.5.27] - 2022-06-19

    Fixed

    • #4950: False error on atMost() invocation rule without call
    • #4962: Ukraine banner unreadable on white background

    [8.5.26] - 2022-04-01

    Fixed

    • #4938: Test Double code generator does not handle void return type declaration on __clone() methods

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.28

    Bump phpunit/phpunit from 8.5.8 to 8.5.28

    Bumps phpunit/phpunit from 8.5.8 to 8.5.28.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.28] - 2022-07-29

    Fixed

    • #5015: Ukraine banner unreadable on black background
    • #5016: PHPUnit 8.5.27 does not work on PHP 7.2.0-7.2.18 and PHP 7.3.0-7.3.5

    [8.5.27] - 2022-06-19

    Fixed

    • #4950: False error on atMost() invocation rule without call
    • #4962: Ukraine banner unreadable on white background

    [8.5.26] - 2022-04-01

    Fixed

    • #4938: Test Double code generator does not handle void return type declaration on __clone() methods

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    Changed

    • #4812: Do not enforce time limits when a debugging session through DBGp is active
    • #4835: Support for $GLOBALS['_composer_autoload_path'] introduced in Composer 2.2

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.27

    Bump phpunit/phpunit from 8.5.8 to 8.5.27

    Bumps phpunit/phpunit from 8.5.8 to 8.5.27.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.27] - 2022-06-19

    Fixed

    • #4950: False error on atMost() invocation rule without call
    • #4962: Ukraine banner unreadable on white background

    [8.5.26] - 2022-04-01

    Fixed

    • #4938: Test Double code generator does not handle void return type declaration on __clone() methods

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    Changed

    • #4812: Do not enforce time limits when a debugging session through DBGp is active
    • #4835: Support for $GLOBALS['_composer_autoload_path'] introduced in Composer 2.2

    Fixed

    • #4840: TestDox prettifying for class names does not correctly handle diacritics
    • #4846: Composer proxy script is not ignored

    [8.5.21] - 2021-09-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump guzzlehttp/guzzle from 6.5.5 to 6.5.7

    Bump guzzlehttp/guzzle from 6.5.5 to 6.5.7

    Bumps guzzlehttp/guzzle from 6.5.5 to 6.5.7.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.7

    See change log for changes.

    Release 6.5.6

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.7 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 2
  • Bump guzzlehttp/guzzle from 6.5.5 to 6.5.6

    Bump guzzlehttp/guzzle from 6.5.5 to 6.5.6

    Bumps guzzlehttp/guzzle from 6.5.5 to 6.5.6.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.6

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.26

    Bump phpunit/phpunit from 8.5.8 to 8.5.26

    Bumps phpunit/phpunit from 8.5.8 to 8.5.26.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.26] - 2022-04-01

    Fixed

    • #4938: Test Double code generator does not handle void return type declaration on __clone() methods

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    Changed

    • #4812: Do not enforce time limits when a debugging session through DBGp is active
    • #4835: Support for $GLOBALS['_composer_autoload_path'] introduced in Composer 2.2

    Fixed

    • #4840: TestDox prettifying for class names does not correctly handle diacritics
    • #4846: Composer proxy script is not ignored

    [8.5.21] - 2021-09-25

    Changed

    • PHPUnit no longer converts PHP deprecations to exceptions by default (configure convertDeprecationsToExceptions="true" to enable this)
    • The PHPUnit XML configuration file generator now configures convertDeprecationsToExceptions="true"

    Fixed

    ... (truncated)

    Commits
    • ef117c5 Prepare release
    • c8dd6ec Update tools
    • 35c7b86 Update tools
    • 7a77a52 We need to dynamically (and conditionally) compile these traits as their code...
    • c1c9d4d Closes #4938
    • 1d2a88d Rename MockedCloneMethod and UnmockedCloneMethod traits to MockedCloneMethodW...
    • d87d433 Update tools
    • eea1871 Revert "Sort test suites by name"
    • 377244f Leftover from 223a20ffbcc8aa460842299e557687d5774ab3da
    • 220cb8c Fix CS/WS issues
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump guzzlehttp/psr7 from 1.6.1 to 1.8.5

    Bump guzzlehttp/psr7 from 1.6.1 to 1.8.5

    Bumps guzzlehttp/psr7 from 1.6.1 to 1.8.5.

    Release notes

    Sourced from guzzlehttp/psr7's releases.

    1.8.5

    See change log for changes.

    1.8.4

    See change log for changes.

    1.8.3

    See change log for changes.

    1.8.2

    See change log for changes.

    1.8.1

    See change log for changes.

    1.8.0

    See change log for changes.

    1.7.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/psr7's changelog.

    1.8.5 - 2022-03-20

    Fixed

    • Correct header value validation

    1.8.4 - 2022-03-20

    Fixed

    • Validate header values properly

    1.8.3 - 2021-10-05

    Fixed

    • Return null in caching stream size if remote size is null

    1.8.2 - 2021-04-26

    Fixed

    • Handle possibly unset url in stream_get_meta_data

    1.8.1 - 2021-03-21

    Fixed

    • Issue parsing IPv6 URLs
    • Issue modifying ServerRequest lost all its attributes

    1.8.0 - 2021-03-21

    Added

    • Locale independent URL parsing
    • Most classes got a @final annotation to prepare for 2.0

    Fixed

    • Issue when creating stream from php://input and curl-ext is not installed
    • Broken Utils::tryFopen() on PHP 8

    1.7.0 - 2020-09-30

    Added

    • Replaced functions by static methods

    Fixed

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.25

    Bump phpunit/phpunit from 8.5.8 to 8.5.25

    Bumps phpunit/phpunit from 8.5.8 to 8.5.25.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.25] - 2022-03-16

    Fixed

    • #4934: Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    Changed

    • #4812: Do not enforce time limits when a debugging session through DBGp is active
    • #4835: Support for $GLOBALS['_composer_autoload_path'] introduced in Composer 2.2

    Fixed

    • #4840: TestDox prettifying for class names does not correctly handle diacritics
    • #4846: Composer proxy script is not ignored

    [8.5.21] - 2021-09-25

    Changed

    • PHPUnit no longer converts PHP deprecations to exceptions by default (configure convertDeprecationsToExceptions="true" to enable this)
    • The PHPUnit XML configuration file generator now configures convertDeprecationsToExceptions="true"

    Fixed

    • #4772: TestDox HTML report not displayed correctly when browser has custom colour settings

    [8.5.20] - 2021-08-31

    Fixed

    ... (truncated)

    Commits
    • 9ff23f4 Prepare release
    • cf9457e Closes #4934
    • 995d322 Test PHAR with code coverage on PHP versions where PHPUnit 8.5 supports code ...
    • 0dc9e43 Leftover from 9457c48f09b542fdb80a9e858ae2703b70cc095b
    • 9457c48 Backport build automation changes from PHPUnit 9.5 to PHPUnit 8.5
    • 829345b Fix: Remove unnecessary require_once
    • 19e008a Leftover from 0f609d2dd45f1eb93710b18d976d3768172b2359
    • d48009b Fix: Use PHPUnit\TestFixture as namespace for test fixtures
    • 35c6ddf Fix: Remove unused test fixtures
    • 70fd459 Fix: Import
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump phpunit/phpunit from 8.5.8 to 8.5.24

    Bump phpunit/phpunit from 8.5.8 to 8.5.24

    Bumps phpunit/phpunit from 8.5.8 to 8.5.24.

    Changelog

    Sourced from phpunit/phpunit's changelog.

    [8.5.24] - 2022-03-05 - #StandWithUkraine

    Changed

    • #4874: PHP_FLOAT_EPSILON is now used instead of hardcoded 0.0000000001 in PHPUnit\Framework\Constraint\IsIdentical

    Fixed

    • When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead

    [8.5.23] - 2022-01-21

    Fixed

    • #4799: Memory leaks in PHPUnit\Framework\TestSuite class
    • #4857: Result of debug_backtrace() is not used correctly

    [8.5.22] - 2021-12-25

    Changed

    • #4812: Do not enforce time limits when a debugging session through DBGp is active
    • #4835: Support for $GLOBALS['_composer_autoload_path'] introduced in Composer 2.2

    Fixed

    • #4840: TestDox prettifying for class names does not correctly handle diacritics
    • #4846: Composer proxy script is not ignored

    [8.5.21] - 2021-09-25

    Changed

    • PHPUnit no longer converts PHP deprecations to exceptions by default (configure convertDeprecationsToExceptions="true" to enable this)
    • The PHPUnit XML configuration file generator now configures convertDeprecationsToExceptions="true"

    Fixed

    • #4772: TestDox HTML report not displayed correctly when browser has custom colour settings

    [8.5.20] - 2021-08-31

    Fixed

    • #4751: Configuration validation fails when using brackets in glob pattern

    [8.5.19] - 2021-07-31

    Fixed

    ... (truncated)

    Commits
    • 293cb00 Prepare release
    • 4634e70 #StandWithUkraine
    • 83e5a9a Make this expectation consistent with others
    • 3f2d882 Consistently use TestRunner::write() instead of Printer::write()
    • e93feea Add note about Symfony's PHPUnit bridge
    • fd7a3d5 Remove deprecated totallyTyped attribute
    • 303d866 Update tools
    • c48c35d Remove deprecated totallyTyped attribute
    • 5ceeed4 Remove superfluous code
    • 8eaae8d Prevent illogical values for high lower bound and low upper bound
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
Releases(0.12.4)
Owner
LogComex
Repositorios LogComex
LogComex
Setup Docker Para Projetos Laravel 9 com PHP 8

Setup Docker Para Projetos Laravel 9 com PHP 8

EspecializaTi 56 Dec 6, 2022
Imagem de Laravel com Docker para projetos futuros

LaraDocker Este projeto foi criado com a intensão de facilitar o desenvolvimento de novos projetos que podem a ser desenvolvidos por mim, ou por outra

Silas S. da Silva. 1 Nov 6, 2021
Página Web de la empresa InterClean desarrollada en Wordprees con Astra/Elementor

<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html; ch

Iván Crespo Reyes 1 Nov 15, 2021
Practice-php - Repositório para praticar a sintaxe de php.

Configuração Inicial para desenvolver em PHP Instalando o PHP no Linux (Ubuntu) sudo apt install php libapache2-mod-php sudo apt-get update Utilizand

Lucas Muffato 4 Dec 29, 2022
Repositório, usado para testar integração entre laravel e vercel

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

3ret 2 Dec 6, 2021
bin/magento command to display configured preferences for classes or interfaces

bin/magento command to display configured preferences for classes or interfaces A bin/magento command that will show you the configured preferences fo

David Manners 14 Jul 18, 2022
This library can be used, among other things, to retrieve the classes, interfaces, traits, enums, functions and constants declared in a file

marijnvanwezel/reflection-file Library that allows reflection of files. This library can be used, among other things, to retrieve the classes, interfa

Marijn van Wezel 5 Apr 17, 2022
The SensioLabs DeprecationDetector runs a static code analysis against your project's source code to find usages of deprecated methods, classes and interfaces

SensioLabs DeprecationDetector CAUTION: This package is abandoned and will no longer receive any updates. The SensioLabs DeprecationDetector runs a st

QOSSMIC GmbH 389 Nov 24, 2022
PHPStan extension for sealed classes and interfaces.

Sealed classes with PHPStan This extension adds support for sealed classes and interfaces to PHPStan. Installation To use this extension, require it v

Jiří Pudil 14 Nov 28, 2022
Jéssica Paula 7 Aug 12, 2022
Repositório da turma 18 de PHP

Programação Backend Professor: Thiago G. Traue ([email protected]) CLASSROOM DA DISCIPLINA: NESTE LINK Preparação do ambiente de desenvolviment

Prof. Thiago G. Traue 5 Mar 22, 2022
Repositorio del TP final de la materia de Introduccion a la programacion

tateti Repositorio del TP final de la materia de Introduccion a la programacion Materia TECNICATURA UNIVERSITARIA EN DESARROLLO WEB INTRODUCCION A LA

Jeremias 1 Apr 12, 2022
Repositorio del Trabajo Práctico Obligatorio de la Materia Introducción a la programación en la carrera Tecnicatura en Desarrollo Web de la Universidad Nacional del Comahue

tateti Proyecto php para jugar al tateti en Introduccion a la Programación (FAI) Materia 2021 Introducción a la Programación Tecnicatura en Desarrollo

Francisco Rodriguez 2 Nov 24, 2021
Repositorio Oficial de UtSaber.com

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Run Chems 2 Dec 10, 2021
Este Repositório guarda arquivos dos meus primeiros passos utilizando o Framework Laravel. Curso: Matheus Battisti.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

null 1 Jun 12, 2022
Implementação do desafio "Pontos de Interesse por GPS", do repositório backend-br.

Points Of Interest (POIs) Overview Endpoints Instalação Repositório Configuração Úteis FAQ Overview Implementação do desafio Pontos de Interesse por G

Gustavo Freze 4 Sep 3, 2022
Repositorio del código fuente utilizado en la página web Lifo.es durante los años 2017 a 2022

Lifo.es Código fuente del juego de rol online Lifo modificado por mi (Sora) durante los años 2017 a 2022. Este código es una modificación del código b

null 5 Dec 28, 2022
YL MVC Structure (PHP MVC) is a pattern made in PHP used to implement user interfaces, data, and controlling logic.

YL MVC Structure (PHP MVC) is a pattern made in PHP used to implement user interfaces, data, and controlling logic. It is built based on the combination of ideas from the Yii framework and Laravel framework (yl).

Tan Nguyen 3 Jan 3, 2023
Este es un sitema bibliotecario para registro de adquisiciones y prestamos para INATEC Siuna

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

James Reyes 3 Mar 26, 2022