- Definitions of nullable parameters have been fixed according to PHP 8.4 deprecations.
ArrayStorage::setMultiple()
now returnstrue
instead offalse
.
- Bug Fixes
- [spiral/auth] Fixed configuration replacement for auth in HttpAuthBootloader
- [spiral/http] Fixed Server Request binding for root services
- Bug Fixes
- [spiral/core]
ServerRequestInterface
is always resolved into a Proxy in thehttp
scope - [spiral/cache]
EventDispatcher
is now injected intoCacheManager
- [spiral/core]
- Bug Fixes
- [spiral/router] Router now uses proxied container to create middlewares in a right scope.
- [spiral/router] Better binding for the interceptor handler.
DebugBootloader
now uses a Factory Proxy to resolve collectors. Unresolved collectors don't break state populating flow.
- Bug Fixes
- [spiral/core] Improved introspecting of Container when a Container Proxy is provided into the
Introspector
. - [spiral/http] Improved exception message when Input Manager can't get a Request in because of wrong scope.
GuardScope
has been deprecated. UseGuardInterface
directly instead.
- [spiral/core] Improved introspecting of Container when a Container Proxy is provided into the
- Bug Fixes
- [spiral/core] Added a proxy recursion detection a dependency on resolving: a
RecursiveProxyException
will be thrown in this case. - [spiral/boot] Fixed concurrent writing and reading cached data on workers boot.
- [spiral/core] Added a proxy recursion detection a dependency on resolving: a
- Increased code quality by Rector.
- Bug Fixes
- [spiral/router] Fixed fallback interceptors handler in
AbstractTarget
.
- [spiral/router] Fixed fallback interceptors handler in
- Increased code quality by Rector.
- High Impact Changes
- Scopes
- Deeper integration with Container Scopes: contextual scopes are created inside dispatcher scopes.
- Interceptors
- Added a new package
spiral/interceptors
. spira/hmvc
is deprecated now.
- Added a new package
- Scopes
- Other Features
- [spiral/queue] Added
Spiral\Queue\TaskInterface
andSpiral\Queue\Task
which will contain all the necessary data for job processing.
- [spiral/queue] Added
- Medium Impact Changes
- [spiral/core] Interface
Spiral\Core\Container\SingletonInterface
is deprecated, useSpiral\Core\Attribute\Singleton
instead. Will be removed in v4.0.
- [spiral/core] Interface
- Other Features
- Added
Spiral\Scaffolder\Command\InfoCommand
console command for getting information about available scaffolder commands. - [spiral/core] Added the ability to bind the interface as a proxy via
Spiral\Core\Config\Proxy
orSpiral\Core\Config\DeprecationProxy
. - [spiral/core] Added the ability to configure the container using
Spiral\Core\Options
. Added option checkScope to enable scope checking.
- Added
- Bug Fixes
- [spiral/tokenizer] Fixed finalize for listeners
- Other Features
- Added Tokenizer Listeners to the
Spiral\Command\Tokenizer\InfoCommand
console command. - Added
Spiral\Command\Tokenizer\ValidateCommand
console command for validating Tokenizer listeners.
- Added Tokenizer Listeners to the
- Other Features
- The
Spiral\Debug\Config\DebugConfig
has been added for easy addition of tags and collectors. - [spiral/console] The ability to use enum as an option in a console command when configuring it with attributes has been added.
- The
- Other Features
- [spiral/boot] Added
Spiral\Boot\Bootloader\BootloaderRegistryInterface
andSpiral\Boot\Bootloader\BootloaderRegistry
to allow for easier management of bootloaders.
- [spiral/boot] Added
- Other Features
- [spiral/queue] Added
Spiral\Queue\Interceptor\Consume\RetryPolicyInterceptor
to enable automatic job retries with a configurable retry policy. - [spiral/monolog-bridge] Added the ability to configure the Monolog messages format via environment variable
MONOLOG_FORMAT
. - [spiral/translator] Added the ability to register additional locales directories.
- [spiral/prototype] Added console command
Spiral\Prototype\Command\ListCommand
for listing prototype dependencies.
- [spiral/queue] Added
- Bug Fixes
- [spiral/storage] Fixed
visibility
in the Storage configuration - [spiral/tokenizer] Improved
Tokenizer Info
console command - [spiral/debug] Assigning
null
instead of usingunset
in the reset method - [spiral/core] Added checking
hasInstance
in the parent scope
- [spiral/storage] Fixed
- Bug Fixes
- [spiral/core] Fixed with checking singletons in the
hasInstance
method
- [spiral/core] Fixed with checking singletons in the
- Bug Fixes
- [spiral/core] Adding
force
parameter to thebindSingleton
method
- [spiral/core] Adding
- Bug Fixes
- [spiral/events] Fixed Event Dispatcher rebinding
- [spiral/router] Fixed incorrect Concatenation of Route Pattern with Prefix in Route Group
- [spiral/boot] Fixed loading ENV variables from dotenv in Kernel System section
- Other Features
- [spiral/attributes] Added the ability to configure the Attributes cache or disable the cache
- Medium Impact Changes
- [spiral/core] Migration a significant portion of the internal operations from runtime to configuration time.
- [spiral/core] Replaced the previous array-based structure that was utilized to store information about bindings within the container. The new approach involves the utilization of Data Transfer Objects (DTOs).
- [spiral/core] Added a new container scope interface Spiral\Core\ContainerScopeInterface that can be used to run code withing isolated IoC scope.
- [spiral/scaffolder] Method
baseDirectory
ofSpiral\Scaffolder\Config\ScaffolderConfig
class is deprecated.
- Other Features
- [spiral/tokenizer] Added the ability to look for interfaces and enums.
- [spiral/tokenizer] Added
tokenizer:info
console command - [spiral/prototype] Added PHP 8.1 support for prototype injector
- [spiral/auth] Added
Spiral\Auth\TokenStorageScope
, this class can be used to get the concrete implementation of the token storage in a current container scope. - [spiral/auth-http] Added a
Spiral\Auth\TokenStorageInterface
binding in theSpiral\Auth\Middleware\AuthMiddleware
with the used TokenStorage. - [spiral/filters] Added
Spiral\Filters\Model\Mapper\Mapper
that sets values for filter properties. It utilizes a collection of casters, each designed to handle a specific type of value. - [spiral/filters]
- [spiral/scaffolder] Added new public method
declarationDirectory
to theSpiral\Scaffolder\Config\ScaffolderConfig
class that returns the directory path of the specified declaration, or default directory path if not specified. - [spiral/attributes] Added the ability to disable annotations reader support and the ability to replace instantiator for attributes reader
- Added support
psr/http-message
v2 - Added PHPUnit 10 support
- Bug Fixes
- [spiral/paginator] Fixed problem when paginator doesn't calculate
countPages
correctly in constructor - [spiral/router] Fixed issue with default parameter values
- [spiral/auth-http] Setting default transport in
AuthTransportMiddleware
- [spiral/filters] Fixed nullable Nested Filters
- [spiral/paginator] Fixed problem when paginator doesn't calculate
- Bug Fixes
- [spiral/filters] Fixed InputScope to allow retrieval of non-bag input sources
- [spiral/pagination] Fixed problem when paginator doesn't calculate
countPages
correctly in constructor
- Medium Impact Changes
- [spiral/queue] Added the ability to use mixed types as job payload.
- Bug Fixes
- [spiral/scaffolder] Fixed the problem with redefined command types.
- [spiral/console] Fixed the problem with commands description with signature definition.
- [spiral/tokenizer] Fixed the problem with using named parameters in class located by a tokenizer.
- [spiral/telemetry] Fixed LogTracer elapsed time log.
- Other Features
- [spiral/console] Added the ability to guess option mode, unless it is explicitly passed in the
Spiral\Console\Attribute\Option
attribute. - Updated psalm version to 5.0.
- Added support doctrine/annotations 2.x
- [spiral/console] Added the ability to guess option mode, unless it is explicitly passed in the
- Bug Fixes
- [spiral/scaffolder] Fixed the problem with namespace option in some scaffolder commands.
- High Impact Changes
- [spiral/tokenizer] Added the ability to cache tokenizer listeners.
- [spiral/core] Container with isolated memory scopes.
- Medium Impact Changes
- A minimal version of
symfony/console
increased to^6.1
.
- A minimal version of
- Other Features
- [spiral/core] Added container
Singleton
attribute to replaceSpiral\Core\SingletonInterface
. - [spiral/console] Added the ability to configure console commands via attributes.
- [spiral/console] Added the ability to prompt for missing required arguments.
- [spiral/scaffolder] Added the ability to specify a custom
namespace
in theSpiral\Scaffolder\Command\BootloaderCommand
,Spiral\Scaffolder\Command\CommandCommand
,Spiral\Scaffolder\Command\ConfigCommand
,Spiral\Scaffolder\Command\ControllerCommand
,Spiral\Scaffolder\Command\JobHandlerCommand
,Spiral\Scaffolder\Command\MiddlewareCommand
console commands. - [spiral/cache] Added the ability to configure the prefix in the storage alias.
- Added
defineInterceptors
method inSpiral\Bootloader\DomainBootloader
class. - [spiral/filter] Makes Setter attribute for the spiral/filters component repeatable.
- [spiral/sendit] Adds custom transports registrar for SendIt component.
- [spiral/core] Added container
- Bug Fixes
- [spiral/filters] Fixed problem with validation nested filters.
- [spiral/core] Fixed infinite recursion on using for class name binding to the same class name.
- [spiral/queue] Removing the
QueueInterface
binding as a singleton. - [spiral/core] Fixed the problem with singleton objects creation with custom arguments.
- Medium Impact Changes
- [spiral/reactor] Method
removeClass
ofSpiral\Reactor\Partial\PhpNamespace
class is deprecated. Use methodremoveElement
instead. - [spiral/boot] Deprecated Kernel constants and add new function
defineSystemBootloaders
to allow for more flexibility in defining system bootloaders.
- [spiral/reactor] Method
- Other Features
- [spiral/router] Added named route patterns registry
Spiral\Router\Registry\RoutePatternRegistryInterface
to allow for easier management of route patterns. - [spiral/exceptions] Improved the exception trace output for both the plain and console renderers to provide more detailed information about previous exceptions.
- [spiral/exceptions] Made the Verbosity enum injectable to allow for easier customization and management of
verbosity levels from env variable
VERBOSITY_LEVEL
. - [spiral/reactor] Added methods
removeElement
,getClass
,getElements
,getEnum
,getEnums
,getTrait
,getTraits
,getInterface
,getInterfaces
in the classSpiral\Reactor\Partial\PhpNamespace
. - [spiral/reactor] Added methods
getElements
,getEnum
,getEnums
,getTrait
,getTraits
,getInterface
,getInterfaces
in the classSpiral\Reactor\FileDeclaration
.
- [spiral/router] Added named route patterns registry
- Medium Impact Changes
- [spiral/boot] Class
Spiral\Boot\BootloadManager\BootloadManager
is deprecated. Will be removed in version v4.0. - [spiral/stempler] Adds null locale processor to remove brackets
[[ ... ]]
when don't use Translator component.
- [spiral/boot] Class
- Other Features
- [spiral/session] Added session handle with cache driver.
- [spiral/router] Added routes with
PATCH
method intoroute:list
command. - [spiral/boot] Added
Spiral\Boot\BootloadManager\InitializerInterface
. This will allow changing the implementation of this interface by the developer. - [spiral/boot] Added
Spiral\Boot\BootloadManager\StrategyBasedBootloadManager
. It allows the implementation of a custom bootloaders loading strategy. - [spiral/boot] Added the ability to register application bootloaders via object instance or anonymous object.
- [spiral/boot] Removed
final
from theSpiral\Boot\BootloadManager\Initializer
class.
- Bug Fixes
- [spiral/views] Fixed problem with using view context with default value.
- [spiral/queue] Added
Spiral\Telemetry\Bootloader\TelemetryBootloader
dependency to QueueBootloader. - [spiral/core] (PHP 8.2 support) Fixed problem with dynamic properties in
Spiral\Core\Container
.
- High Impact Changes
- [spiral/router] Added the ability to add a
prefix
to thename
of all routes in a group. - [spiral/auth] Added
Spiral\Auth\TokenStorageProviderInterface
to allow custom token storages and an ability to set default token storage viaauth
config. - [spiral/telemetry] Added new component to collect and report application metrics.
- [spiral/router] Added the ability to add a
- Medium Impact Changes
- Removed go files from the repository
- Other Features
- [spiral/auth-http] Added
Spiral\Auth\Middleware\Firewall\RedirectFirewall
middleware to redirect user to login page if they are not authenticated.
- [spiral/auth-http] Added
- Bug Fixes
- [spiral/http] Fixed error suppressing in the
Spiral\Http\Middleware\ErrorHandlerMiddleware
- [spiral/stempler] Fixed documentation link
- [spiral/auth] Fixed downloads badge
- [spiral/http] Fixed error suppressing in the
- High Impact Changes
- Medium Impact Changes
- Other Features
- [spiral/queue] Added the ability to pass headers in the
headers
parameter in the job handlers. - [spiral/telemetry] Added new component
- [spiral/queue] Added new option
headers
in theSpiral\Queue\Options
and new interfaceSpiral\Queue\ExtendedOptionsInterface
. - [spiral/events] Added event interceptors.
- [spiral/core] Added container instance to callback function parameters in
Spiral\Core\Container
andSpiral\Core\ContainerScope
. - [spiral/core] Improved ContainerException message
- [spiral/queue] Added the ability to pass headers in the
- Bug Fixes
- [spiral/queue] Fixed problem with using push interceptors in Queue component
- Other Features
- [spiral/filters] Added
Spiral\Filter\ValidationHandlerMiddleware
for handling filter validation exception. - [spiral/router] Fixed the problem with parsing a pattern with
0
value in route parameter. - [spiral/validation] Added the ability to configure the default validator via method
setDefaultValidator
in theSpiral\Validation\Bootloader\ValidationBootloader
.
- [spiral/filters] Added
- Bug Fixes
- Removed readonly from
Spiral\Stempler\Transform\Import\Bundle
- Fixed the problem with parsing a route pattern with zero value #773
- Fixed phpdoc for AuthorizationStatus::$topics property
- Removed readonly from
- High Impact Changes
- Component
spiral/data-grid-bridge
is removed fromspiral/framework
repository. Please, use standalone packagespiral/data-grid-bridge
instead. - Component
spiral/data-grid
is removed fromspiral/framework
repository. Please, use standalone packagespiral/data-grid
instead. Spiral\Boot\ExceptionHandler
has been eliminated. NewSpiral\Exceptions\ExceptionHandler
with interfacesSpiral\Exceptions\ExceptionHandlerInterface
,Spiral\Exceptions\ExceptionRendererInterface
andSpiral\Exceptions\ExceptionReporterInterface
have been added.- Console commands
Spiral\Command\Cycle\MigrateCommand
,Spiral\Command\Cycle\SyncCommand
,Spiral\Command\Cycle\UpdateCommand
,Spiral\Scaffolder\Command\MigrationCommand
,Spiral\Scaffolder\Command\Database\EntityCommand
,Spiral\Scaffolder\Command\Database\RepositoryCommand
,Spiral\Command\Database\ListCommand
,Spiral\Command\Database\TableCommand
,Spiral\Command\Migrate\InitCommand
,Spiral\Command\Migrate\MigrateCommand
,Spiral\Command\Migrate\ReplayCommand
,Spiral\Command\Migrate\RollbackCommand
,Spiral\Command\Migrate\StatusCommand
is removed. Use same console commands fromspiral/cycle-bridge
package. - Console commands
Spiral\Command\GRPC\ListCommand
,Spiral\Command\GRPC\GenerateCommand
is removed. Use same console commands fromspiral/roadrunner-bridge
package. - Classes
Spiral\Auth\Cycle\Token
,Spiral\Auth\Cycle\TokenStorage
,Spiral\Cycle\RepositoryInjector
,Spiral\Cycle\SchemaCompiler
,Spiral\Domain\CycleInterceptor
is removed. Use same classes fromspiral/cycle-bridge
instead. - Bootloaders
Spiral\Bootloader\Jobs\JobsBootloader
,Spiral\Bootloader\Server\LegacyRoadRunnerBootloader
,Spiral\Bootloader\Server\RoadRunnerBootloader
,Spiral\Bootloader\ServerBootloader
,Spiral\Bootloader\GRPC\GRPCBootloader
is removed. Usespiral/roadrunner-bridge
package. - Bootloaders
Spiral\Bootloader\Cycle\AnnotatedBootloader
,Spiral\Bootloader\Cycle\CycleBootloader
,Spiral\Bootloader\Cycle\ProxiesBootloader
,Spiral\Bootloader\Cycle\SchemaBootloader
,Spiral\Bootloader\Database\DatabaseBootloader
,Spiral\Bootloader\Database\DisconnectsBootloader
,Spiral\Bootloader\Database\MigrationsBootloader
is removed. Usespiral/cycle-bridge
package. - Bootloader
Spiral\Bootloader\Broadcast\BroadcastBootloader
is removed. Usespiral/roadrunner-broadcast
package instead. - Bootloader
Spiral\Bootloader\Http\WebsocketsBootloader
is removed. - Component
spiral/annotations
is removed. Usespiral/attributes
instead. - Added return type
void
to a methodspublish
,publishDirectory
,ensureDirectory
inSpiral\Module\PublisherInterface
interface. - Removed
Spiral\Http\SapiDispatcher
andSpiral\Http\Emitter\SapiEmitter
. Please, use packagespiral/sapi-bridge
instead. - Bootloader
Spiral\Bootloader\Http\DiactorosBootloader
is removed. You can use the bootloaderSpiral\Nyholm\Bootloader\NyholmBootloader
from the packagespiral/nyholm-bridge
to register PSR-7/PSR-17 factories.
Spiral\Http\Diactoros\ResponseFactory
,Spiral\Http\Diactoros\ServerRequestFactory
,Spiral\Http\Diactoros\StreamFactory
,Spiral\Http\Diactoros\UploadedFileFactory
,Spiral\Http\Diactoros\UriFactory
are removed. You can usespiral/nyholm-bridge
to define PSR-17 factories.- [spiral/exceptions] All handlers have been renamed into renderers.
HandlerInterface
has been deleted. - [spiral/exceptions] Added
Spiral\Exceptions\Verbosity
enum. - [spiral/router] Removed deprecated method
addRoute
in theSpiral\Router\RouterInterface
andSpiral\Router\Router
. Use methodsetRoute
instead. - [spiral/validation]
Spiral\Validation\Checker\EntityChecker
is removed. UseSpiral\Cycle\Bootloader\ValidationBootloader
withSpiral\Cycle\Validation\EntityChecker
from packagespiral/cycle-bridge
- [spiral/validation] Removed deprecated methods
datetime
andtimezone
in theSpiral\Validation\Checker\TypeChecker
class. UseSpiral\Validation\Checker\DatetimeChecker::valid()
andSpiral\Validation\Checker\DatetimeChecker::timezone()
instead. - [spiral/validation] Added return type
array|callable|string
to the methodparseCheck
inSpiral\Validation\ParserInterface
interface. - [spiral/validation] Added
array|string|\Closure
parameter type of$rules
to the methodgetRules
inSpiral\Validation\RulesInterface
interface. - [spiral/validation] Added
array|\ArrayAccess
parameter type of$data
to the methodvalidate
inSpiral\Validation\ValidationInterface
interface. - [spiral/validation] Added return type
mixed
to the methodgetValue
, addedmixed
parameter type of$default
to the methodgetValue
, addedmixed
parameter type of$context
to the methodwithContext
, added return typemixed
to the methodgetContext
inSpiral\Validation\ValidatorInterface
interface. - [spiral/filters] Added return type
void
andmixed
parameter type of$context
to the methodsetContext
, added return typemixed
to the methodgetContext
inSpiral\Filters\FilterInterface
interface. Added return typemixed
to the methodgetValue
inSpiral\Filters\InputInterface
. - [spiral/dumper] The
Dumper
Component has been removed from the Framework. - [spiral/http] Config
Spiral\Config\JsonPayloadConfig
moved to theSpiral\Bootloader\Http\JsonPayloadConfig
. - [spiral/reactor] Added return type
mixed
andarray|string
parameter type of$search
,array|string
parameter type of$replace
to the methodreplace
inSpiral\Reactor\ReplaceableInterface
. - [spiral/session] Added return type
void
to the methodresume
inSpiral\Session\SessionInterface
. - [spiral/session] Added return type
self
andmixed
parameter type of$value
to the methodset
inSpiral\Session\SessionSectionInterface
. - [spiral/session] Added return type
bool
to the methodhas
inSpiral\Session\SessionSectionInterface
. - [spiral/session] Added return type
mixed
andmixed
parameter type of$default
to the methodget
inSpiral\Session\SessionSectionInterface
. - [spiral/session] Added return type
mixed
andmixed
parameter type of$default
to the methodpull
inSpiral\Session\SessionSectionInterface
. - [spiral/session] Added return type
void
to the methoddelete
inSpiral\Session\SessionSectionInterface
. - [spiral/session] Added return type
void
to the methodclear
inSpiral\Session\SessionSectionInterface
. - [spiral/pagination] Added return type
self
to the methodlimit
, added return typeself
to the methodoffset
inSpiral\Pagination\PaginableInterface
- [spiral/prototype] Parameter
$printer
now is not nullable inSpiral\Prototype\Injector
constructor. - [spiral/models] Added return type
self
, addedmixed
parameter type of$value
to the methodsetField
, added return typemixed
, addedmixed
parameter type of$default
to the methodgetField
, added return typeself
to the methodsetFields
inSpiral\Models\EntityInterface
. - [spiral/models] Added return type
mixed
to the methodgetValue
inSpiral\Models\ValueInterface
. - [spiral/logger] Added return type
self
to the methodaddListener
, added return typevoid
to the methodremoveListener
inSpiral\Logger\ListenerRegistryInterface
interface. - [spiral/hmvc] Added return type
mixed
to the methodprocess
inSpiral\Core\CoreInterceptorInterface
interface. - [spiral/hmvc] Added return type
mixed
to the methodcallAction
inSpiral\Core\CoreInterface
interface. - [spiral/encrypter] Added return type
mixed
to the methoddecrypt
inSpiral\Encrypter\EncrypterInterface
interface. inSpiral\DataGrid\InputInterface
interface. - [spiral/http] Added return type
array
andmixed
parameter type of$filler
to the methodfetch
, added return typemixed
to the methodoffsetGet
, added return typemixed
andmixed
parameter type of$default
to the methodget
inSpiral\Http\Request\InputBag
class. - [spiral/config] Added return type
void
to the methodsetDefaults
inSpiral\Config\ConfiguratorInterface
interface. - [spiral/core] Comprehensive code refactoring. A lot of signatures from
Spiral\Core
namespace has been changed. New features:- Added supporting for PHP 8.0 Union types.
- Added supporting for variadic arguments:
- array passed by parameter name.
- with named arguments inside.
- with positional arguments inside.
- value passed by parameter name.
- positional trailed values.
- array passed by parameter name.
- Support for default object value.
- Added supporting for referenced parameters in Resolver.
- The Factory now more strict: no more arguments type conversion.
- Added the
Spiral\Core\ResolverInterface::validateArguments
method for arguments validation. - Support for
WeakReference
bindings.
- [spiral/boot] Method
starting
renamed tobooting
, methodstarted
renamed tobooted
in the classSpiral\Boot\AbstractKernel
. - [spiral/boot] Added return type
self
to the methodset
inSpiral\Boot\DirectoriesInterface
interface. - [spiral/boot] Added return type
mixed
andmixed
parameter type of$default
to the methodget
, added inSpiral\Boot\EnvironmentInterface
interface. - [spiral/boot] Added return type
static
to the methodaddFinalizer
, added return typevoid
to the methodfinalize
inSpiral\Boot\FinalizerInterface
interface. - [spiral/boot] Added return type
self
to the methodaddDispatcher
, added return typemixed
to the methodserve
inSpiral\Boot\KernelInterface
interface. - [spiral/boot] Added
exceptionHandler
parameter in theSpiral\Boot\AbstractKernel::create
method. - [spiral/boot]
Spiral\Boot\AbstractKernel
constructor is protected now. - [spiral/boot] Added return type
mixed
to the methodloadData
, added return typevoid
andmixed
parameter type of$data
to the methodsaveData
inSpiral\Boot\MemoryInterface
interface. - [spiral/boot] In
Bootloaders
, the name of the method has been changed fromboot
toinit
. In the code of custom Bootloaders, need to change the name of the method. - [spiral/console] Added return type
void
to the methodwriteHeader
, added return typevoid
to the methodexecute
, methodwhiteFooter
renamed towriteFooter
, added return typevoid
to the methodwriteFooter
inSpiral\Console\SequenceInterface
interface. - [spiral/files] Added return type
bool
to the methoddelete
, added return typebool
to the methoddeleteDirectory
, added return typebool
to the methodtouch
, added return typebool
to the methodsetPermissions
inSpiral\Files\FilesInterface
. - [spiral/views] Added return type
mixed
to the methodresolveValue
inSpiral\Views\ContextInterface
. - [spiral/views] Added return type
mixed
to the methodgetValue
inSpiral\Views\DependencyInterface
. - [spiral/translator] Added return type
void
to a methodssetLocales
,saveLocale
inSpiral\Translator\Catalogue\CacheInterface
. - [spiral/translator] Added return type
void
to the methodsave
inSpiral\Translator\CatalogueManagerInterface
. - [spiral/storage] Added
string|\Stringable
parameter type of$id
to a methodsgetContents
,getStream
,exists
,getLastModified
,getSize
,getMimeType
,getVisibility
inSpiral\Storage\Storage\ReadableInterface
. - [spiral/storage] Added
string|\Stringable
parameter type of$id
to a methodscreate
,setVisibility
,delete
. Addedstring|\Stringable
parameter type of$id
andmixed
parameter type of$content
to the methodwrite
, addedstring|\Stringable
parameter type of$source
and$destination
to a methodscopy
,move
inSpiral\Storage\Storage\WritableInterface
. - [spiral/stempler] Added return type
mixed
andmixed
parameter type of$default
to the methodgetAttribute
inSpiral\Stempler\Node\AttributedInterface
. - [spiral/stempler] Added return type
mixed
andmixed
parameter type of$node
to the methodenterNode
, added return typemixed
andmixed
parameter type of$node
to the methodleaveNode
inSpiral\Stempler\VisitorInterface
. - [spiral/sendit] Dropped support
pipeline
parameter inmailer
config. Please, use the parameterqueue
instead. - [spiral/security] Added return type
self
to a methodsaddRole
,removeRole
inSpiral\Security\PermissionsInterface
- [spiral/security] Added return type
self
to a methodsset
,remove
inSpiral\Security\RulesInterface
- [spiral/distribution] Bootloader
Spiral\Bootloader\Distribution\DistributionBootloader
moved to theSpiral\Distribution\Bootloader\DistributionBootloader
, configSpiral\Bootloader\Distribution\DistributionConfig
moved to theSpiral\Distribution\Config\DistributionConfig
. - [spiral/storage] Bootloader
Spiral\Bootloader\Storage\StorageBootloader
moved to theSpiral\Storage\Bootloader\StorageBootloader
, configSpiral\Bootloader\Storage\StorageConfig
moved to theSpiral\Storage\Config\StorageConfig
. - [spiral/validation] Bootloader
Spiral\Bootloader\Security\ValidationBootloader
moved to theSpiral\Validation\Bootloader\ValidationBootloader
. - [spiral/views] Bootloader
Spiral\Bootloader\Views\ViewsBootloader
moved to theSpiral\Views\Bootloader\ViewsBootloader
. - [spiral/boot] By default, overwriting of environment variable values is disabled, the default value
for
$overwrite
changed fromtrue
tofalse
in theSpiral\Boot\Environment
. - [spiral/queue] Removed method
pushCallable
inSpiral\Queue\QueueTrait
. - [spiral/dotenv-bridge] Bootloader
Spiral\DotEnv\Bootloader\DotenvBootloader
must be moved from theLOAD
section to theSYSTEM
section in the applicationApp.php
file.
- Component
- Medium Impact Changes
- A minimal version of
PHP
increased to^8.1
- A minimal version of
symfony/finder
increased to^5.3
- A minimal version of
league/flysystem
increased to^2.3
- A minimal version of
symfony/console
increased to^6.0
Spiral\Snapshots\FileSnapshooter
usesVerbosity
enum instead of int flag.Spiral\Snapshots\FileSnapshooter
usesExceptionRendererInterface $renderer
instead ofHandlerInterface $handler
.Spiral\Snapshots\SnapshotterInterface
usage replaced withSpiral\Exceptions\ExceptionReporterInterface
in all classes.- Removed
bin/spiral
. Uses thespiral/roadrunner-cli
package instead.
- A minimal version of
- Other Features
- [spiral/queue] Added queue interceptors.
- [spiral/debug] Added
Spiral\Debug\StateConsumerInterface
. - [spiral/boot] Added new
boot
method inBootloaders
. It will be executed after theinit
method is executed in allBootloaders
. The oldboot
method has been renamed toinit
. See High Impact Changes section. - [spiral/boot] Added automatic booting of
Bootloaders
requested in theinit
andboot
methods. They no longer need to be specified explicitly inDEPENDENCIES
property or indefineDependencies
method. - [spiral/monolog-bridge] Added the ability to configure the default channel using the configuration file or
environment variable
MONOLOG_DEFAULT_CHANNEL
. - [spiral/serializer] Added a new spiral/serializer component. Contains an interface and a minimal implementation that can be extended by external serializers.
- [spiral/queue] Added the ability to configure serializers for different types of jobs.
- Added class
Spiral\Exceptions\Reporter\FileReporter
, which implementsSpiral\Exceptions\ExceptionReporterInterface
and can create text files with information about an exception.
- High Impact Changes
- Medium Impact Changes
- Low Impact Changes
- Other Features
- Bug Fixes
- Medium Impact Changes
- Dispatcher
Spiral\Http\SapiDispatcher
is deprecated. Will be moved tospiral/sapi-bridge
and removed in v3.0
Spiral\Http\Emitter\SapiEmitter
,Spiral\Http\Exception\EmitterException
,Spiral\Http\EmitterInterface
,Spiral\Http\SapiRequestFactory
is deprecated. Will be removed in version v3.0. After the release of v3.0, must use the packagespiral/sapi-bridge
for SAPI functionality.- The
dumper
component is deprecated and will be removed in v3.0
- Dispatcher
- Other Features
- [spiral/http] Added parameter
chunkSize
in thehttp
configuration file. - [spiral/queue] Added attribute
Queueable
to mark classes that can be queued. AddedSpiral\Queue\QueueableDetector
class to easily check if an object should be queued or not and get the queue from an attribute or getQueue method on the object. - [spiral/broadcasting] New component with common interfaces (RR2.0 support)
- [spiral/http] Added parameter
- Medium Impact Changes
- Bootloaders
Spiral\Bootloader\Broadcast\BroadcastBootloader
,Spiral\Bootloader\Http\WebsocketsBootloader
are deprecated. Will be removed in v3.0. - Console commands
Spiral\Command\Database\ListCommand
,Spiral\Command\Database\TableCommand
,Spiral\Command\GRPC\GenerateCommand
,Spiral\Command\GRPC\ListCommand
,Spiral\Command\Migrate\AbstractCommand
,Spiral\Command\Migrate\InitCommand
,Spiral\Command\Migrate\MigrateCommand
,Spiral\Command\Migrate\ReplayCommand
,Spiral\Command\Migrate\RollbackCommand
,Spiral\Command\Migrate\StatusCommand
are deprecated. Will be removed in v3.0. - Classes
Spiral\Broadcast\Config\WebsocketsConfig
,Spiral\Broadcast\Middleware\WebsocketsMiddleware
,Spiral\GRPC\Exception\CompileException
,Spiral\GRPC\GRPCDispatcher
,Spiral\GRPC\LocatorInterface
,Spiral\GRPC\ProtoCompiler
,Spiral\GRPC\ServiceLocator
,Spiral\Http\LegacyRrDispatcher
,Spiral\Http\RrDispatcher
are deprecated. Will be removed in v3.0. - Changed package replacement strategy. "*" is replaced by "self.version".
- Sapi emitter now supports streaming emitting.
- [spiral/data-grid-bridge] Removed deprecation in
classes
Spiral\DataGrid\Annotation\DataGrid
,Spiral\DataGrid\Bootloader\GridBootloader
,Spiral\DataGrid\Config\GridConfig
,Spiral\DataGrid\Interceptor\GridInterceptor
,Spiral\DataGrid\Response\GridResponse
,Spiral\DataGrid\Response\GridResponseInterface
,Spiral\DataGrid\GridInput
.
- Bootloaders
- Other Features
- [spiral/data-grid-bridge] Added method
addWriter
inSpiral\DataGrid\Bootloader\GridBootloader
. - Extended version of
psr/log
dependency from^1.0
to1 - 3
- [spiral/data-grid-bridge] Added method
- High Impact Changes
- [spiral/queue] Added queue injector #592
- [spiral/cache] Added cache injector #600
- Medium Impact Changes
- [spiral/tokenizer] Added ability to use scopes for indexing files with specific scopes #593
- Other Features
- [spiral/boot] Added ability to disable overwriting env variables for
Spiral\Boot\Environment
#599 - [spiral/storage] Added storage bucket factory #601
- [spiral/console] Added return types for interface compatibility #591
- [spiral/boot] Added ability to disable overwriting env variables for
- High Impact Changes
- Medium Impact Changes
- [spiral/session] Added
Spiral\Session\SessionFactoryInterface
. Now you can use custom implementation of sessions. - [spiral/scaffolder] Console
commands
Spiral\Scaffolder\Command\MigrationCommand
,Spiral\Scaffolder\Command\Database\RepositoryCommand
,Spiral\Scaffolder\Command\Database\EntityCommand
is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - [spiral/scaffolder] Scaffolder
Spiral\Scaffolder\Declaration\MigrationDeclaration
is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - [spiral/attributes] Class annotations will be discovered from class traits.
- A minimal version of
PHP
increased to^7.4
- [spiral/session] Added
- Other Features
- [spiral/prototype] Added
queue
andcache
properties - [spiral/mailer] Added ability to set delay for messages
- [spiral/queue] Added NullDriver
- [spiral/mailer] Class
Spiral\Mailer\Message
is no longer final and is available for extension
- [spiral/prototype] Added
- High Impact Changes
- Medium Impact Changes
- [spiral/sendit] Method
getQueuePipeline
ofSpiral\SendIt\Config\MailerConfig
class is deprecated. Use methodgetQueue
instead. Added environment variablesMAILER_QUEUE
andMAILER_QUEUE_CONNECTION
- [spiral/sendit] Method
- Other Features
- Added Symfony 6 support
- High Impact Changes
- Medium Impact Changes
- Classes
Spiral\Validation\Checker\EntityChecker
,Spiral\Auth\Cycle\Token
,Spiral\Auth\Cycle\TokenStorage
,Spiral\Cycle\RepositoryInjector
,Spiral\Cycle\SchemaCompiler
, is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - Console commands
Spiral\Command\Cycle\MigrateCommand
,Spiral\Command\Cycle\SyncCommand
,Spiral\Command\Cycle\UpdateCommand
is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - Bootloaders
Spiral\Bootloader\Cycle\AnnotatedBootloader
,Spiral\Bootloader\Cycle\CycleBootloader
,Spiral\Bootloader\Cycle\ProxiesBootloader
,Spiral\Bootloader\Cycle\SchemaBootloader
is deprecated. Usespiral/cycle-bridge
instead - Interceptor
Spiral\Domain\CycleInterceptor
is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - Scaffolders
Spiral\Scaffolder\Declaration\Database\Entity\AnnotatedDeclaration
,Spiral\Scaffolder\Declaration\Database\RepositoryDeclaration
is deprecated. Will be moved tospiral/cycle-bridge
and removed in v3.0 - Component
spiral/data-grid-bridge
is deprecated. Will be moved to spiral/cycle-bridge and removed in v3.0 - Component
spiral/annotations
is deprecated. Usespiral/attributes
instead - A minimal version of
doctrine/annotations
increased to^1.12
- [spiral/validation] Error messages for 'number::lower' and 'number::higher' rules were changed to reflect that these checks are in fact 'lower or equal' and 'higher or equal'. You may need to adjust translations file accordingly.
- [spiral/sendit] Added ability to use
sync
driver for mail queue (#398)
- Classes
- Other Features
- [spiral/validation] Add array::count, array::range, array::shorter and array::longer
- [spiral/queue] New component with common interfaces (RR2.0 support) rules (#435)
- [spiral/cache] New component with common interfaces (RR2.0 support)
- [spiral/views] Allow custom loader in ViewManager
- [spiral/monolog-bridge] Added ability to configure Monolog processors
-
New Functionality
- Added new
spiral/storage
component (See https://spiral.dev/docs/component-storage) - Added new
spiral/distribution
component (See https://spiral.dev/docs/component-distribution) - Introduced and improved
spiral/attributes
component (See https://spiral.dev/docs/component-attributes)
- Added new
-
High Impact Changes
- Added
league/flysystem: ^2.0
dependency.
- Added
-
Other Features
- Added basic RoadRunner 2.0 support (only HTTP)
- [data-grid] Implement fragment/expression injections for DataGrid sorters (#400)
- [data-grid] Datagrid/fix inarray accessor edge case (#379)
- [boot] ExceptionHandler does not account for error_reporting setting (#386)
-
High Impact Changes
- A minimal version of
monolog/monolog
increased to^2.2
- A minimal version of
-
Other Features
- Added PHP 8 support
- [spiral/prototype] added typed properties support for php 7.4
- [spiral/validation] arrayOf validation checker
- [spiral/validation] introduce
now
parameter in datetime checker - [spiral/validation] extract abstract validator
- [spiral/data-grid] datetime from formatted string value needed
- [spiral/data-grid] add mixed specifications
- [spiral/data-grid] make grid factory more reusable
- [spiral/data-grid] add
ilike
postgres filter - [spiral/domain] add pipeline interceptor
- [spiral/domain] extract permissions provider for
GuardInterceptor
-
Bug Fixes
- [spiral/prototype] name conflict resolver
- [spiral/prototype] trait remove problem
- [spiral/prototype] inherited injections problem
-
High Impact Changes
- A minimal version of
symfony/translation
increased to^5.1
- A minimal version of
symfony/console
increased to^5.1
- A minimal version of
symfony/finder
increased to^5.1
- A minimal version of
-
Medium Impact Changes
- Dependence of
zend/zend-diactoros
was replaced bylaminas/laminas-diactoros ^2.3
- [spiral/dumper]
Spiral\Debug\Dumper
class marked asfinal
- Dependence of
-
Other Features
- [spiral/http] Implementation of RFC7231 "Accept" header parser
- [spiral/http] Simplified ErrorHandlerMiddleware injection
- [spiral/reactor] Fix render comment for namespace declaration
- [spiral/validation] Add
any
,none
conditions
- RR updated to 1.8.2 (don't use broken 1.8.1 tag)
- Jobs plugin updated to 2.2.0 (see the changelog)
- Allow json requests with empty body by @rauanmayemir
- Add the ability to control view cache separately from DEBUG via VIEW_CACHE env variable
- added support for Postgres Cycle Auth tokens
- added the ability to redefine the error message in Guarded annotation
- Update RR to 1.8.0
- [bugfix] invalid value associated with validation context by CycleInterceptor
- added
JobRegistry
with the ability to route jobs into custom pipelines - added the ability to bind job name to the concrete implementation
- added EntityChecker to check the existence and uniqueness of ORM entities
- the Auth/CookieTransport will respect the application base path
- the command
encrypt:key
is no longer private - cleaned up the Publisher extension by @ncou
- fixed a number of PHPUnit 8.0 warnings
- RouterBootloader no longer blocks the HttpConfig (easier middleware creation)
- show list of actions in multi-action routes in
route:list
by @ncou - added default alias for
notNull
validation rule - fixed path behavior in
grpc:generate
command by @matthewhall-ca - FilterInterceptor can automatically detect the validation context
- RoadRunner version updated to 1.7.0
- build.sh script updated. Included
-trimpath
andmusl
target - RoadRunner version updated to 1.6.4
- jobs updated to version 2.1.3
- roadrunner updated to version 1.6.3
- fix issue with debug http collector fail in console mode
- WebSocket module updated to v1.1.0
- added reload module
- fix
TableCommand
render for fragments - Add return status code to the ConsoleDispatcher.php
- minor code-base quality improvements
- added
route:list
command - app server updated with recent roadrunner version
- queue server does not show
PUSH
message anymore - added
roave/security-advisories
- bump
spiral/validation
dependency - register
DatetimeChecker
in theValidationBootloader
- added striker payload validation for jobs
- added support for SerializerRegistryInterface for spiral/jobs
- refactor in WebsocketBootloader
- fixed bug in stop sequence of ws roadrunner service
- added broadcast service
- added WebSocket server
- minor refactoring in json exception handler
- bugfix: client exceptions no longer sent with 500 code in application/json payloads
- bugfix: fixed issue with forced expiration of session auth tokens
- the framework can work without any snapshooter
- improved code coverage
- fixed invalid middleware association for http state collector
- improved debug state management
- exceptions are able to display current request state, logs and etc.
- ability to register custom debug state collectors
- the plain snapshots enabled by default instead of HTML based
- improved error handling for JSON requests
- lighter API and abstract class base injection for
spiral/filters
- FileSnapshotter now sends logs into "default" log channel
- CycleInterceptor use parameter as entity value instead of entity role
- added interceptable core support and DomainBootloader
- the ability to automatically inject Cycle entity via route parameter
- the ability to automatically pre-validate Filters
- the ability to authorize controller methods using @Guarded annotation
- improving the Cycle TokenStorage for better testing capabilities
- authorizes trait removed in favor of core interceptors
- Auth Cycle\TokenStorage now requests TransactionInterface directly, for simpler testing
- json payload middleware read stream content via (string) conversion
- JsonPayloadParserBootloader renamed to JsonPayloadsBootloader
- minor CS in CycleBootloader, cleaner dependencies
- the ORM schema can be pre-heated automatically
- ability to create injectors to interfaces
- added auth component
- new CS fixes in compliance with PSR-12
- minor improvements in session scopes
- added health service to the app server
- added CookieManager for simpler access to cookies in request scope
- added SessionScope for simpler access to session in request scope
- added automatic CS formatting
- update
cycle/proxy-factory
dependency
spiral/jobs
updated to2.0
- job handlers introduced
- typo fix:
JsonPayloadBootload
toJsonPayloadParserBootloader
- added
JsonPayloadMiddleware
andJsonPayloadBootloader
- more tests
- added 7.4 tests to travis
- 7.1 support is officially dropped
- ability to inject constructor dependencies into cycle repositories and classes from app container
- added support for Prometheus metrics for
jobs
(queue) andgrpc
services - exceptions will use default style
- bugfix: inability to render
FragmentInterface
indb:table
command view:compile
won't compileNativeEngine
templates anymore- ability to skip server download if version did not change
- fixed config method names in spiral/views
- cycle/annotated is now based on doctrine/annotations
- cycle/annotated is not required to work with cycle anymore
- DatabaseTable command has been modified to display composite FKs
- added ability to configure worker relay using ENV RR_WORKER by @myavchik
- automatically configure worker based on rr relay settings
- cycle/annotated is not required for cycle to work
- added MetricsInterface service for Prometheus
- fixed i18n tests
- updated RoadRunner dependency
- added RR services: headers, metrics
- updated dependency (and interfaces) with cycle/proxy-factory
- http component split into cookies and csrf packages
- decoupled from zend/diactoros
- http component split into cookies and csrf packages
- decoupled from zend/diactoros
- added support for pre-loading specific relations using eager or lazy loading methods
- cycle:sync does not require configuration now
- added
dumprr
function (dump to STDERR)
- no more migration warnings while running static analysis on a project
- fixed container binding for cycle repository
- migration command now adds
\n
after each migration - bugfix
vendor/bin/spiral get-binary
on linux machines
grpc:generate
command now includes all proto files from given directoryRbacBootloader
renamed toGuardBootloader
- added
vendor/bin/spiral get-binary
command to download application server by @Alex-Bond
- added GRPC dispatcher
- added encrypter:key command
- added binary server release
- renamed MvcBootloader to RouterBootloader
- minor cs
- TBD
- Fixed bug with incorrect Request association for already exists bags
- Added charset UTF-8 for response wrapper
- Improved error handling for CLI applications
- Ability to specify JSON response code inside jsonSerialize
- Fixed a bug when error message was converted to empty array
- Fixed a bug when multidepth requests contained invalid prefix (in case of depth more than 3)
- ability to locate view cache files by view name and namespace
- ability to add conditions to skip validation rules
- ValidatesEntity now caches last set of produced errors
- Ability to use EntityInterface as parameter for ValidatorInterface->setData() method
- Improved cache management for StemplerEngine (fixed issue with non-stable cache key)
- Ability to force view recompilation thought ViewManager
- first public release, no BC changes
- improvements in Translation indexations
- bugfix in Loader caused an exception with Swift::autoloader
uri
function restored- Router is now available outside of http scope
- Cache directory is now relative to runtime directory
- DateTime accessors now can accept DateTimeInterface
- Dependencies update
- Validator can now accept checkers outside of it's config
- Proper timezone detection for datetime accessors
- RenderException now shows original error location in views
- Improvements in cache management for Twig engine
Encrypter
- Proper exception when encryption key is invalid
Session
- Session does not force session id in cookie when session not started
Framework
- Dropped support of PHP5+
- Added secure session implementation
- Code coverage improvements
- Twig updated to 2.0 branch
- PHPUnit updated to 5.0 branch
- Components split into separate repositories
- Symfony dependencies updated to 3.0 branch
- added
bind()
function to specify IoC dependencies in configs - ViewSource class added into views
Common
- Dropped support of PHP5+
- Code coverage improvements
- Cache component removed (replaced with PSR-16)
- Views component moved to Framework bundle
- Validation component moved to Framework bundle
- Translation component moved to Framework bundle
- Encryption component moved to Framework bundle
- Migrations component moved in
- Automatic migration generation is now part of Migration component
- Security component moved in
- Monolog dependency removed
- PHPUnit updated to 5.0 branch
- Symfony dependencies updated to 3.0 branch
- Schema definitions moved to array constants instead of default property values
- Simplified PaginatorInterface
- Reactor component moved in
- Debugger (log manager) component removed
- Improved implementation of Tokenizer component
- Lazy wire declaration for FactoryInterface
Core
- ScoperInterface moved into Framework bundle
- Container now validates scalar agument types when supplied by user
DBAL
- Improved polyfills for SQLServer
- Improved SQL injection prevention
- Improved timezone management
- Refactoring of DBAL schemas
- Bugfixes
- Unions with ordering in SQLServer
- Invalid parameter handling for update queries with nested selection
- Pagination classes are immutable now
- Ability to use nested queries in JOIN statements
- on argument in join() methods is deprecated, use on() function directly
Models
- Removed features
- Embedded validations
- Magic getter and setter methods via __call()
- setValue and packValue methods added
- "fields" property is now private
- SolidableTrait is now part of models ORM
- Refactoring of SchemaBuilder
- RecordSelector does not extend SelectQuery anymore
- Transactional (UnitOfWork) support
- Improvements in memory mapping
- Improvements in tree operations (save)
- Removed features
- ActiveRecord thought direct table communication
- MutableNumber accessor
- Validations
- Bugfixes
- ManyToMany relations to non-saved records
- BelongsToRelation to non-saved records
- Definition of morphed relations must be explicit now
- All ORM entities MUST have proper primary key now
- Ability to define custom column types in combination with accessors
- Relation loaders and schemas are immutable now
- Memory scope are optional now
- Record does not have "source" method by default now (see SourceTrait)
- Optimizations in load method with "using" option
- Added late bindings (locate outer record based on Interface or role name)
- Added detach() method into HasMany relation
Stempler
- StemplerLoader synced with Twig abstraction, StemplerSource introduced
- SourceContext (twig like) have been added
ODM
- Moved to latest PHP7 mongo drivers
- Removed features
- Validations
- Removed parent document reference in compositions
- Scalar array split into multiple versions
- CompositableInterface improved
- Document does not have "source" method by default now (see SourceTrait)
Storage
- Improved implementation of RackspaceServer
- Added GridFS server support