Upgrade Guide¶
Upgrading to V5¶
So you have decided to upgrade to v5! Congratulations!!
Phalcon v5 contains a lot of changes in components and interfaces. Upgrading is going to be a time-consuming task, depending on how big and complex your application is. We hope that this document will make your upgrade journey smoother and also offer insight as to why certain changes were made and how they will help the framework in the future.
We will outline the areas that you need to pay attention to and make necessary changes so that your code can run as smoothly as it has been with v4. Although the changes are significant, it is more of a methodical task than a daunting one.
需求¶
PHP 8.0¶
Phalcon v5 supports only PHP 8.0 and above. PHP 8.0 主动支持 has already expired, including security fixes. We will be supporting this version for a while longer, offering developers more time to upgrade their applications.
Since Phalcon 4, we have been following the PHP releases and adjusting Phalcon accordingly to work with those releases.
安装¶
Phalcon can be installed using PECL.
Alternative installation
Download the latest zephir.phar
来自点击这里. Add it to a folder that can be accessed by your system.
Clone the repository
编译 Phalcon
You will need to add the following line to your php.ini
(in some cases both the CLI and web versions of it)
检查模块
If the above does not work, check the php.ini
that your CLI is looking for. If you are using phpinfo()
and a web browser to check if Phalcon has been loaded, make sure that your php.ini
file that your web server is looking for contains the extension=phalcon.so
. You will need to restart your web server after you add the new line in php.ini
.
General Notes¶
One of the biggest changes with this release is that we no longer have top-level classes. All top-level classes have been moved into relevant namespaces (except Phalcon\Tag
). For instance Phalcon\Loader
has been moved to Phalcon\Autoload\Loader
. This change was necessary for the future expansion of the project.
Summary
v4 | v5 |
---|---|
Phalcon\Cache | Phalcon\Cache\Cache |
Phalcon\Collection | Phalcon\Support\Collection |
Phalcon\Config | Phalcon\Config\Config |
Phalcon\Container | Phalcon\Container\Container |
Phalcon\Crypt | Phalcon\Encryption\Crypt |
Phalcon\Debug | Phalcon\Support\Debug |
Phalcon\Di | Phalcon\Di\Di |
Phalcon\Escaper | Phalcon\Html\Escaper |
Phalcon\Exception | Removed |
Phalcon\Filter | Phalcon\Filter\Filter |
Phalcon\Helper | Removed in favor of Phalcon\Support\Helper |
Phalcon\Loader | Phalcon\Autoload\Loader |
Phalcon\Logger | Phalcon\Logger\Logger |
Phalcon\Kernel | Removed |
Phalcon\Registry | Phalcon\Support\Registry |
Phalcon\Security | Phalcon\Encryption\Security |
Phalcon\Text | Removed in favor of Phalcon\Support\Helper |
Phalcon\Url | Phalcon\Mvc\Url |
Phalcon\Validation | Phalcon\Filter\Validation |
Phalcon\Version | Phalcon\Support\Version |
Changes¶
Acl¶
The ACL component has had some methods and components renamed. The functionality remains the same as in previous versions.
- Renamed
Phalcon\Acl\ComponentAware
到Phalcon\Acl\ComponentAwareInterface
- Renamed
Phalcon\Acl\RoleAware
到Phalcon\Acl\RoleAwareInterface
Acl\Adapter\Memory
- Acl\Adapter\AdapterInterface
¶
- Added
getInheritedRoles()
to return an array of the inherited roles in the adapter.
注解¶
应用程序¶
Phalcon\Application\AbstractApplication
¶
- The
getEventsManager()
now returns aPhalcon\Events\ManagerInterface
或null
资源管理¶
The 资源管理 component has had changes to the interface as well and some methods were renamed. The functionality remains the same as in previous versions.
Phalcon\Assets\Asset
¶
getAssetKey()
now usessha256
to compute the key- Renamed
getLocal()
到isLocal()
- Renamed
setLocal()
到setIsLocal()
Phalcon\Assets\Collection
¶
- The class now uses
ArrayIterator
而不是Iterator
- Renamed
getLocal()
到isLocal()
- Renamed
setLocal()
到setIsLocal()
- Renamed
getTargetLocal()
到getTargetIsLocal()
- Renamed
setTargetLocal()
到setTargetIsLocal()
- Removed
getPosition()
,current()
,key()
,next()
,rewind()
,valid()
Phalcon\Assets\Inline
¶
getAssetKey()
now usessha256
to compute the key
Phalcon\Assets\Manager
¶
__construct()
requires aPhalcon\Html\TagFactory
as the first parameter
addCss()
now requires$local
to bebool
和$attributes
to be an array
public function addCss(
string $path,
bool $local = true,
bool $filter = true,
array $attributes = [],
string $version = null,
bool $autoVersion = false
): Manager
addInlineCss()
now requires$filter
to bebool
和$attributes
to be an array
public function addInlineCss(
string $content,
bool $filter = true,
array $attributes = []
): Manager
addJs()
now requires$local
to bebool
和$attributes
to be an array
public function addJs(
string $path,
bool $local = true,
bool $filter = true,
array $attributes = [],
string $version = null,
bool $autoVersion = false
): Manager
addInlineJs()
now requires$filter
to bebool
和$attributes
to be an array
public function addInlineJs(
string $content,
bool $filter = true,
array $attributes = []
): Manager
- Added
has()
method to return if a collection exists
Autoload¶
The 自动加载加载器 component has been moved from the parent namespace. Some method names have been changed and new functionality introduced.
Phalcon\Autoload\Loader
¶
__construct(bool $isDebug = false)
The constructor now accepts a boolean, which allows the loader to collect and store debug information during the discovery and loading process of files, classes, etc. If the variable is set totrue
,getDebug()
will return an array with all the debugging information during the autoload operation. This mode is only for debugging purposes and must not be used in production environments.
use Phalcon\Autoload\Loader;
use Adapter\Another;
$loader = new Loader(true);
$loader
->addNamespace('Base', './Namespaces/Base/')
->addNamespace('Adapter', './Namespaces/Adapter/')
->addNamespace('Namespaces', './Namespaces/')
;
$loader->autoload(Another::class);
var_dump($loader->getDebug());
// [
// 'Loading: Adapter\Another',
// 'Class: 404: Adapter\Another',
// 'Require: 404: ./Namespaces/Adapter/Another.php',
// 'Require: ./Namespaces/Another.php',
// 'Namespace: Namespaces\Adapter - ./Namespaces/Another.php',
// ];
add*
methods have been introduced to help with the setup of the autoloaderaddClass(string $name, string $file): Loader
addDirectory(string $directory): Loader
addExtension(string $extension): Loader
addFile(string $file): Loader
addNamespace(string $name, string|array $directories, bool $prepend = false): Loader
getCheckedPath()
now returns either a string or anull
(if not populated yet)getDebug()
returns an array of debug information, if the Loader has been instantiated with$isDebug = true
getDirs()
has been renamed togetDirectories()
getFoundPath()
now returns either a string or anull
(if not populated yet)registerClasses()
has been renamed tosetClasses()
registerDirs()
has been renamed tosetDirectories()
registerExtensions()
has been renamed tosetExtensions()
setExtensions()
now accepts a second parameter (bool
$merge
) which allows you to merge the data set with what is already set in the LoaderregisterFiles()
has been renamed tosetFiles()
registerNamespaces()
has been renamed tosetNamespaces()
缓存¶
The 缓存 component has been moved to the Cache
命名空间下。
Phalcon\Cache\AdapterFactory
¶
- The constructor now requires a
Phalcon\Storage\SerializerFactory
to be passed as the first parameter - The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Cache\CacheFactory
¶
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Cache\Cache
¶
- Moved
Phalcon\Cache
到Phalcon\Cache\Cache
- The component has been refactored and the dependency to
PSR
has been removed. 更多
Phalcon\Cache\CacheInterface
¶
- A new interface has been introduced (
Phalcon\Cache\CacheInterface
) to offer more flexibility when extending the cache object.
Cli¶
集合¶
The 集合 component has been moved to the Support
命名空间下。更多
配置¶
The 配置 component has been moved to the Config
命名空间下。
Phalcon\Config\Config
¶
- Moved
Phalcon\Config
到Phalcon\Config\Config
Phalcon\Config\ConfigInterface
¶
- A new interface has been introduced (
Phalcon\Config\ConfigInterface
) to offer more flexibility when extending the config object.
Container¶
The Container
component has been removed from the framework. It is in our roadmap to develop a new container that will support auto wiring, as well as providers. Additionally, the container will be designed and implemented in such a way that could be used as a PSR-11 container (with the help of a Proxy class).
Crypt¶
The Crypt component has been moved to the Encryption
命名空间下。更多
DataMapper¶
数据库¶
Phalcon\Db\Adapter\Pdo\AbstractPdo
¶
- Changed
connect(array descriptor = null): bool
到connect(array descriptor = []): void
- Changed
execute(string $sqlStatement, $bindParams = null, $bindTypes = null): bool
到execute(string $sqlStatement, array $bindParams = [], array $bindTypes = []) -> bool
- Changed
getErrorInfo()
到getErrorInfo(): array
- Changed
getInternalHandler(): \PDO
到getInternalHandler(): mixed
- Changed
lastInsertId($sequenceName = null): int | bool
到lastInsertId(string $name = null) -> string | bool
- Changed
query(string $sqlStatement, $bindParams = null, $bindTypes = null): ResultInterface | bool
到query(string $sqlStatement, array $bindParams = [], array $bindTypes = []): ResultInterface | bool
Phalcon\Db\Adapter\Pdo\Mysql
¶
- Changed bind type for
Column::TYPE_BIGINT
to beColumn::BIND_PARAM_STR
- Added bind type for
Column::TYPE_BINARY
to cater toVARBINARY
和BINARY
fields - Added support for comments
Phalcon\Db\Adapter\Pdo\Postgresql
¶
- Changed bind type for
Column::TYPE_BIGINT
to beColumn::BIND_PARAM_STR
- Added support for comments
Phalcon\Db\Adapter\AbstractAdapter
¶
- Changed property
connectionId
到int
- Added property
realSqlStatement
to store the real SQL statement executed - Changed
delete($table, $whereCondition = null, $placeholders = null, $dataTypes = null): bool
到delete($table, string $whereCondition = null, array $placeholders = [], array $dataTypes = []): bool
- Changed
fetchAll(string $sqlQuery, int $fetchMode = Enum::FETCH_ASSOC, $bindParams = null, $bindTypes = null): array
到fetchAll(string $sqlQuery, int $fetchMode = Enum::FETCH_ASSOC, array $bindParams = [], array $bindTypes = []): array
- Changed
fetchOne(string $sqlQuery, $fetchMode = Enum::FETCH_ASSOC, $bindParams = null, $bindTypes = null): array
到fetchOne(string $sqlQuery, $fetchMode = Enum::FETCH_ASSOC, array $bindParams = [], array $bindTypes = []): array
- Changed
getEventsManager(): ManagerInterface
到getEventsManager(): ManagerInterface | null
- Added
getSQLVariables(): array
to return the SQL variables used - Added
supportsDefaultValue(): bool
to allow checking for adapters that support theDEFAULT
keyword
Phalcon\Db\Adapter\AdapterInterface
¶
- Changed
close(): bool
到close(): void
- Changed
connect(array $descriptor = null): bool
到connect(array $descriptor = []): void
- Changed
delete($table, $whereCondition = null, $placeholders = null, $dataTypes = null): bool
到delete($table, string $whereCondition = null, array $placeholders = [], array $dataTypes = []): bool
- Changed
execute(string $sqlStatement, $placeholders = null, $dataTypes = null): bool
到execute(string $sqlStatement, array $bindParams = [], array $bindTypes = []): bool
- Changed
fetchAll(string $sqlQuery, int $fetchMode = 2, $placeholders = null): array
到fetchAll(string $sqlQuery, int $fetchMode = 2, array $bindParams = [], array $bindTypes = []): array
- Changed
fetchOne(string $sqlQuery, int $fetchMode = 2, $placeholders = null): array;
到fetchOne(string $sqlQuery, int $fetchMode = 2, array $bindParams = [], array $bindTypes = []): array
- Added
getDefaultValue(): RawValue
- Changed
getInternalHandler(): \PDO
到getInternalHandler(): mixed
- Changed
lastInsertId($sequenceName = null): int | bool
到lastInsertId(string $name = null) -> string | bool
- Changed
query(string $sqlStatement, $bindParams = null, $bindTypes = null): ResultInterface | bool
到query(string $sqlStatement, array $bindParams = [], array $bindTypes = []): ResultInterface | bool
- Added
supportsDefaultValue(): bool
Phalcon\Db\Adapter\PdoFactory
¶
- Added
getExceptionClass()
to return the exception class for the factory - Renamed
getAdapters()
到getServices()
Phalcon\Db\Dialect\*
¶
- Added support for comments
- Added support for
SMALLINT
for Postgresql
Phalcon\Db\Result\ResultPdo
¶
- Renamed
Phalcon\Db\Result\Pdo
到Phalcon\Db\Result\ResultPdo
Phalcon\Db\Column
¶
- Added support for comments
- Added
TYPE_BINARY
常量读取特定模型的列映射信息 - Added
TYPE_VARBINARY
常量读取特定模型的列映射信息 - Added
getComment(): string | null
Phalcon\Db\DialectInterface
¶
- Changed
getSqlExpression(array $expression, string $escapeChar = null, $bindCounts = null): string;
到getSqlExpression(array $expression, string $escapeChar = null, array $bindCounts = []): string
Phalcon\Db\Dialect
¶
- Changed
getColumnList(array $columnList, string $escapeChar = null, $bindCounts = null): string
到getColumnList(array $columnList, string $escapeChar = null, array $bindCounts = []): string
- Changed
getSqlColumn($column, string $escapeChar = null, $bindCounts = null): string
到getSqlColumn($column, string $escapeChar = null, array $bindCounts = []): string
- Changed
getSqlExpression(array $expression, string $escapeChar = null, $bindCounts = null): string;
到getSqlExpression(array $expression, string $escapeChar = null, array $bindCounts = []): string
Phalcon\Db\Exception
¶
- Changed
Phalcon\Db\Exception
to extend\Exception
Phalcon\Db\Profiler
¶
- Changed
Phalcon\Db\Profiler
to usehrtime()
internally to calculate metrics
Phalcon\Db\ResultInterface
¶
- Changed
dataSeek(long $number)
到dataseek(int $number)
调试¶
The 调试 component has been moved to the Support
命名空间下。更多
Di¶
The Di component has been moved to the Di
命名空间下。
Phalcon\Di\Di
¶
- Moved
Phalcon\Di
到Phalcon\Di\Di
- The
tag
service now returns an instance ofPhalcon\Html\TagFactory
- The (new)
helper
service returns an instance ofPhalcon\Support\HelperFactory
分派器¶
Phalcon\Dispatcher\AbstractDispatcher
¶
- Changed
getEventsManager(): ManagerInterface
到getEventsManager(): ManagerInterface | null
Phalcon\Dispatcher\Exception
¶
- Changed
Phalcon\Dispatcher\Exception
to extend\Exception
域名¶
加密¶
Phalcon\Encryption\Crypt
¶
- Moved
Phalcon\Crypt
到Phalcon\Encryption\Crypt
- Two new constants introduced
DEFAULT_ALGORITHM = "sha256"
和DEFAULT_CIPHER = "aes-256-cfb"
- The
__construct
now setsuseSigning
astrue
(previouslyfalse
) - The
__construct
accepts a third parameter (null
by default), which is aPhalcon\Encryption\Crypt\PadFactory
use Phalcon\Encryption\Crypt;
use Phalcon\Encryption\Crypt\PadFactory;
$padFactory = new PadFactory();
$crypt = new Crypt("aes-256-cfb", true, $padFactory);
If no padFactory
is passed, a new one will be created in the component.
Phalcon\Encryption\Crypt::getAvailableHashAlgos()
was renamed toPhalcon\Encryption\Crypt::getAvailableHashAlgorithms()
Phalcon\Encryption\Crypt::getHashAlgo()
was renamed toPhalcon\Encryption\Crypt::getHashAlgorithm()
Phalcon\Encryption\Crypt::setHashAlgo()
was renamed toPhalcon\Encryption\Crypt::setHashAlgorithm()
Phalcon\Encryption\Crypt\CryptInterface
¶
- Moved
Phalcon\Crypt\CryptInterface
到Phalcon\Encryption\Crypt\CryptInterface
- Changed
Phalcon\Encryption\Crypt\CryptInterface::decryptBase64()
to accept astring
variable as thekey
- Changed
Phalcon\Encryption\Crypt\CryptInterface::encryptBase64()
to accept astring
variable as thekey
- Added
Phalcon\Encryption\Crypt\CryptInterface::useSigning(bool useSigning)
Phalcon\Encryption\Crypt\Exception\Exception
¶
- Moved
Phalcon\Crypt\Exception
到Phalcon\Encryption\Crypt\Exception\Exception
Phalcon\Encryption\Crypt\Exception\Mismatch
¶
- Moved
Phalcon\Crypt\Mismatch
到Phalcon\Encryption\Crypt\Exception\Mismatch
Phalcon\Encryption\Crypt
¶
- Moved from
Phalcon\Crypt
Phalcon\Encryption\PadFactory
¶
- Added
Phalcon\Encryption\PadFactory
to allow for different padding schemes during encryption and decryption of data
Phalcon\Encryption\Padding\*
¶
- Added
Phalcon\Encryption\Padding\PadInterface
to allow for custom padding classes - Added
Phalcon\Encryption\Padding\Ansi
- Added
Phalcon\Encryption\Padding\Iso10126
- Added
Phalcon\Encryption\Padding\IsoIek
- Added
Phalcon\Encryption\Padding\Noop
- Added
Phalcon\Encryption\Padding\Pkcs7
- Added
Phalcon\Encryption\Padding\Space
- Added
Phalcon\Encryption\Padding\Zero
转义器¶
The 转义器 component has been moved to the Html
命名空间下。更多
事件¶
Phalcon\Events\AbstractEventsAware
¶
- Added abstract
Phalcon\Events\AbstractEventsAware
Phalcon\Events\Event
¶
- Changed
public function __construct(string $type, object $source, $data = null, bool $cancelable = true)
到__construct(string $type, $source = null, $data = null, bool $cancelable = true)
($source
is now nullable)
Phalcon\Events\Exception
¶
- Changed
Phalcon\Events\Exception
to extend\Exception
Phalcon\Events\Manager
¶
- Added
isValidHandler(): bool
to return if the internal handler is valid or not
异常¶
Phalcon\Exception
¶
The class has been removed.
工厂¶
Phalcon\Factory\AbstractConfigFactory
¶
- Added abstract
Phalcon\Factory\AbstractConfigFactory
to check configuration elements
Phalcon\Factory\AbstractFactory
¶
- Changed
init()
to read fromgetServices()
Phalcon\Factory\Exception
¶
- Changed
Phalcon\Factory\Exception
to extend\Exception
Filter¶
The Filter component has been moved to the Filter
命名空间下。
Phalcon\Filter\Filter
¶
- Moved
Phalcon\Filter
到Phalcon\Filter\Filter
Phalcon\Filter\Exception
¶
- Changed
Phalcon\Filter\Exception
to extend\Exception
Phalcon\Filter\Factory
¶
- Changed
getAdapters()
到getServices()
Phalcon\Filter\Filter
¶
- Added
__call()
to allow using filter names as methods i.e.$filter->upper($input)
Phalcon\Filter\Validation
¶
- Added
getValueByEntity()
和getValueByData()
for more options to retrieve data
Phalcon\Filter\Validation\Validator\Exception
¶
- Changed
Phalcon\Filter\Validation\Validator\Exception
to extend\Exception
AbstractValidator.zep
¶
- Added the ability to define
allowEmpty
to any validator (in the parameters)
Phalcon\Filter\Validation\Exception
¶
- Changed
Phalcon\Filter\Validation\Exception
to extend\Exception
Phalcon\Filter\Validation\ValidationInterface
¶
- Changed
add(string $field, ValidatorInterface $validator): <ValidationInterface
到add($field, ValidatorInterface $validator): <ValidationInterface
- Changed
rule(string $field, ValidatorInterface $validator): <ValidationInterface
到rule($field, ValidatorInterface $validator): <ValidationInterface
Phalcon\Filter\Validation\ValidatorFactory
¶
- Changed
getAdapters()
到getServices()
Flash¶
Phalcon\Flash\AbstractFlash
¶
- Added the ability to define CSS icon classes (
setCssIconClasses()
) - Changed
getTemplate(string $cssClasses): string
到getTemplate(string $cssClasses, string $cssIconClasses): string
Phalcon\Flash\Exception
¶
- Changed
Phalcon\Flash\Exception
to extend\Exception
Phalcon\Flash\Session
¶
- Added
SESSION_KEY
常量读取特定模型的列映射信息 - Changed
has($type = null): bool
到has(string $type = null): bool
- Changed
message(string $type, string $message): string | null
到message(string $type, $message): string | null
表单¶
Phalcon\Forms\Element\*
classes now use the new Phalcon\Html\TagFactory
to generate HTML code. As a result, the functionality has changed slightly. The main difference is that a Phalcon\Html\TagFactory
has to be set in the form object so that elements can be rendered. If the Phalcon\Html\TagFactory
is not set, then the component will search the Di container (Phalcon\Di\DiInterface
) for a service with the name tag
. If you are using Phalcon\Di\FactoryDefault
as your container, then the tag
service is already defined for you.
Phalcon\Forms\Element\AbstractElement
¶
- Added
getTagFactory()
to return thePhalcon\Html\TagFactory
object used internally, as well assetTagFactory(TagFactory $tagFactory): AbstractElement
to set it.
Phalcon\Forms\Element\Check
¶
Phalcon\Forms\Element\Radio
¶
- The classes now use the
Phalcon\Html\Helper\Input\Checkbox
和Phalcon\Html\Helper\Input\Radio
。这些类使用checked
和unchecked
参数来设置每个控件的状态。如果checked
参数与$value
相同,则控件将被选中。如果存在unchecked
参数,并且$value
不等于checked
parameter. [more][html-tagfactory]
辅助函数¶
The 辅助函数 component has been moved to the Support
命名空间下。更多
Html¶
Phalcon\Html\Escaper
¶
- Moved
Phalcon\Escaper
到Phalcon\Html\Escaper
- Changed the
flags
property that controls the flags forhtmlspecialchars()
被设置为11
which corresponds toENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401
. - Method names changed to be more verbose.
- Added
attributes(string input)
for escaping HTML attributes (replacesescapeHtmlAttr()
) - Added
css(string $input)
for escaping CSS (replacesescapeCss()
- Added
html(string $input = null)
for escaping HTML (replacesescapeHtml()
) - Added
js(string $input)
for escaping JS (replacesescapeJs()
) - Added
setFlags(int $flags)
to set the flagshtmlspecialchars()
(replacessetHtmlQuoteType()
) - Added
url(string $input)
for escaping URL strings (replacesescapeUrl()
) escapeCss()
now raises a deprecated warningescapeJs()
now raises a deprecated warningescapeHtml()
now raises a deprecated warningescapeUrl()
now raises a deprecated warningsetHtmlQuoteType()
now raises a deprecated warning
Phalcon\Html\Escaper\EscaperInterface
¶
- Moved
Phalcon\Escaper\EscaperInterface
到Phalcon\Html\Escaper\EscaperInterface
- Added
attributes(string input)
- Added
css(string $input)
- Added
html(string $input = null)
- Added
js(string $input)
- Added
setFlags(int $flags)
- Added
url(string $input)
- Removed
escapeCss()
- Removed
escapeJs()
- Removed
escapeHtml()
- Removed
escapeUrl()
- Removed
setHtmlQuoteType()
Phalcon\Html\Escaper\Exception
¶
- This class has been moved to this namespace
Phalcon\Escaper
. - Changed
Phalcon\Html\Escaper\Exception
to extend\Exception
Phalcon\Html\Helper
¶
- Moved
Phalcon\Helper
到Phalcon\Html\Helper
- The component has been refactored and offers more functionality now. [more][html-tagfactory]
Phalcon\Html\Link
¶
- The component has been refactored and the dependency to
PSR
has been removed. [more][html-link]
Phalcon\Html\TagFactory
¶
- Added
__call(string $name, array $arguments)
to allow calling helper objects as methods. [more][html-tagfactory] - Added
has(string $name) -> bool
Addedset(string $name, mixed $method): void
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Html\Exception
¶
- Changed
Phalcon\Html\Exception
to extend\Exception
Http¶
Phalcon\Http\Cookie
¶
- Changed
__construct()
and made$httpOnly = false
Phalcon\Http\Cookie\Escaper
¶
- Changed
Phalcon\Http\Request\Exception
to extend\Exception
Phalcon\Http\Message
¶
- The namespace has been removed
Phalcon\Http\Request
¶
- Added
getPreferredIsoLocaleVariant(): string
to return the preferred ISO locale variant.
Phalcon\Http\Request\Exception
¶
- Changed
Phalcon\Http\Cookie\Exception
to extend\Exception
Phalcon\Http\Response\Cookie
¶
- Added
isSent(): bool
to return if the cookie has been sent or not
Phalcon\Http\Response\Headers
¶
- Added
isSent(): bool
to return if the headers have been sent or not
Phalcon\Http\Response\Exception
¶
- Changed
Phalcon\Http\Response\Exception
to extend\Exception
Phalcon\Http\Server
¶
- The namespace has been removed
图像¶
加载器¶
The class has been moved to the Phalcon\Autoload
namespace 更多
日志记录¶
The 日志记录 component has been moved to the Logger
命名空间下。
Phalcon\Logger\Logger
¶
- Moved
Phalcon\Logger
到Phalcon\Logger\Logger
- The component has been refactored and the dependency to
PSR
has been removed. 更多 - The interface method calls are much stricter now.
Phalcon\Logger\AbstractLogger
¶
- Added
Phalcon\Logger\AbstractLogger
with common functionality, to be used by packages that wish to alter interfaces to the logger while keeping the same functionality (see proxy-psr3)
Phalcon\Logger\Adapter\Stream
¶
- Failing to write to the file will throw a
LogicException
而不是UnexpectedValueException
Phalcon\Logger\Formatter\FormatterInterface
¶
- Changed
process(Item $item): string
(previously it returnedarray|string
)
Phalcon\Logger\Formatter\Json
¶
- Changed
format()
to encode JSON with the following options by default:JSON_HEX_TAG
,JSON_HEX_APOS
,JSON_HEX_AMP
,JSON_HEX_QUOT
,JSON_UNESCAPED_SLASHES
,JSON_THROW_ON_ERROR
,
Phalcon\Logger\AdapterFactory
¶
- The constructor now requires a
Phalcon\Storage\SerializerFactory
to be passed as the first parameter - The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Logger\Exception
¶
- Changed
Phalcon\Logger\Exception
to extend\Exception
Phalcon\Logger\Item
¶
- Changed
__construct(string $message, string $levelName, int $level, DateTimeImmutable $dateTime, array $context = [])
(dateTime
接收一个对象来将所有收集到的信息记录到文件中。默认情况下,DateTimeImmutable
object)
Phalcon\Logger\LoggerInterface
¶
- A new interface has been introduced (
Phalcon\Logger\LoggerInterface
) to offer more flexibility when extending the cache object.
消息¶
Phalcon\Messages\Exception
¶
- Changed
Phalcon\Messages\Exception
to extend\Exception
Mvc¶
Phalcon\Mvc\Micro\Collection
¶
- Changed the methods to accept a
callable
作为$handler
instead of mixed delete(string $routePattern, callable $handler, string $name = null)
get(string $routePattern, callable $handler, string $name = null)
head(string $routePattern, callable $handler, string $name = null)
map(string $routePattern, callable $handler, string $name = null)
mapVia(string $routePattern, callable $handler, mixed $method, string $name = null)
options(string $routePattern, callable $handler, string $name = null)
patch(string $routePattern, callable $handler, string $name = null)
post(string $routePattern, callable $handler, string $name = null)
put(string $routePattern, callable $handler, string $name = null)
Phalcon\Mvc\Micro\Exception
¶
- Changed
Phalcon\Mvc\Micro\Exception
to extend\Exception
Phalcon\Mvc\Model\MetaData\Strategy\Annotations
¶
Phalcon\Mvc\Model\MetaData\Strategy\Annotations::getMetaData()
will now return a string instead of an integer when encounteringBIGINT
fields
Phalcon\Mvc\Model\MetaData\Stream
¶
- Changed the constructor to accept an array
__construct(array $options = [])
Phalcon\Mvc\Model\Query\BuilderInterface
¶
- Corrected
having()
signaturehaving(string $conditions, array $bindParams = [], array $bindTypes = [])
- Changed
orderBy()
to accept an array or a stringorderBy(array | string $orderBy)
Phalcon\Mvc\Model\Resultset\Complex
¶
- Changed
current()
to returnmixed
- Added
__serialize()
和__unserialize()
新方法
Phalcon\Mvc\Model\Resultset\Simple
¶
- Changed the constructor to accept
mixed
针对$cache
:__construct(mixed $columnMap, mixed $model, mixed $result, mixed $cache = null, bool $keepSnapshots = false)
- Added
__serialize()
和__unserialize()
新方法
Phalcon\Mvc\Model\CriteriaInterface
¶
- Corrected
where()
signaturewhere(string $conditions, mixed $bindParams = null, mixed $bindTypes = null)
Phalcon\Mvc\Model\Exception
¶
- Changed
Phalcon\Mvc\Model\Exception
to extend\Exception
Phalcon\Mvc\Model\ManagerInterface
¶
- Changed
$options
parameter to be an array: addBelongsTo(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasMany(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasOne(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasOneThrough(ModelInterface $model, mixed $fields, string $intermediateModel, mixed $intermediateFields, mixed $intermediateReferencedFields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasManyToMany(ModelInterface $model, mixed $fields, string $intermediateModel, mixed $intermediateFields, mixed $intermediateReferencedFields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
- Changed
getModelSchema(ModelInterface $model)
to returnstring
或null
- Renamed:
existsBelongsTo()
到hasBelongsTo()
existsMany()
到hasHasMany()
existsOne()
到hasHasOne()
existsOneThrough()
到hasHasOneThrough()
existsManyToMany()
到hasHasManyToMany()
Phalcon\Mvc\Model\Manager
¶
- Changed
getEventsManager()
to returnEventManagerInterface
或null
- Changed
getModelSchema(ModelInterface $model)
to returnstring
或null
- Changed
$options
parameter to be an array: addBelongsTo(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasMany(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasOne(ModelInterface $model, mixed $fields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasOneThrough(ModelInterface $model, mixed $fields, string $intermediateModel, mixed $intermediateFields, mixed $intermediateReferencedFields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
addHasManyToMany(ModelInterface $model, mixed $fields, string $intermediateModel, mixed $intermediateFields, mixed $intermediateReferencedFields, string $referencedModel, mixed $referencedFields, array options = []): RelationInterface
- Marked as
@deprecated
: existsBelongsTo()
existsMany()
existsOne()
existsOneThrough()
existsManyToMany()
- Added (replacing the
exists*
methods): hasBelongsTo()
hasHasMany()
hasHasOne()
hasHasOneThrough()
hasHasManyToMany()
- Added
getBuilder()
to return the builder that was created withcreateBuilder()
(或null
)
Phalcon\Mvc\Model\ResultsetInterface
¶
getCache()
now returnsnull
or an object (mixed
)
Phalcon\Mvc\Model\Resultset
¶
__construct()
accepts an object in the$cache
parameter. The object has implementPhalcon\Cache\CacheInterface
或Psr\SimpleCache\CacheInterface
getCache()
now returnsnull
or an object (mixed
)
Phalcon\Mvc\Router
¶
- Changed
add()
,addConnect()
,addDelete()
,addGet()
,addHead()
,addOptions()
,addPatch()
,addPost()
,addPurge()
,addPut()
,addTrace()
,attach()
to acceptint
as$position
- Changed
getEventsManager()
to returnManagerInterface
或null
Phalcon\Mvc\RouterInterface
¶
- Changed
add()
,addConnect()
,addDelete()
,addGet()
,addHead()
,addOptions()
,addPatch()
,addPost()
,addPurge()
,addPut()
,addTrace()
,attach()
to acceptint
as$position
Phalcon\Mvc\Router\Exception
¶
- Changed
Phalcon\Mvc\Router\Exception
to extend\Exception
Phalcon\Mvc\Router\RouteInterface
¶
getHostname()
now returnsstring
或null
getName()
now returnsstring
或null
Phalcon\Mvc\Router\Route
¶
beforeMatch(callable $callback): RouteInterface
now accepts acallable
getHostname()
now returnsstring
或null
getName()
now returnsstring
或null
Phalcon\Mvc\ModelInterface
¶
- Changed
average(array $parameters = [])
to accept an array - Changed
cloneResultset()
to defaultkeepSnapshots = false
- Changed
findFirst(mixed $parameters = null): mixed | null
to returnnull
而不是false
- Changed
getSchema(): string | null
to returnstring
或null
Phalcon\Mvc\View
¶
- Marked as
@deprecated
exists()
- Added
has()
(replacing theexists()
method)
Phalcon\Mvc\View\Exception
¶
- Changed
Phalcon\Mvc\View\Exception
to extend\Exception
Phalcon\Mvc\View\Engine\Volt\Compiler
¶
- Removed
compileCache()
Phalcon\Mvc\Url
¶
- Moved from
Phalcon\Url
Phalcon\Mvc\Url\Exception
¶
- Moved from
Phalcon\Url\Exception
- Changed
Phalcon\Mvc\Url\Exception
to extend\Exception
Phalcon\Mvc\Url\UrlInterface
¶
- Moved from
Phalcon\Url\UrlInterface
Phalcon\Paginator\Exception
¶
- Changed
Phalcon\Paginator\Exception
to extend\Exception
Phalcon\Paginator\PaginatorFactory
¶
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
注册表¶
The 注册表 component has been moved to the Support
命名空间下。更多
安全¶
The 安全 component has been moved to the Encryption
命名空间下。更多
会话¶
Phalcon\Session\Adapter\AbstractAdapter
¶
- Changed
gc(int $maxlifetime): int | bool
to accept onlyint
for the parameter
Phalcon\Session\Adapter\Noop
¶
- Changed
gc(int $maxlifetime): int | bool
to accept onlyint
for the parameter
Phalcon\Session\Adapter\Stream
¶
- Changed
__construct()
to throw an exception if the save path is empty
Phalcon\Session\BagInterface
¶
- Added interface for
Phalcon\Session\Bag
Phalcon\Session\Exception
¶
- Changed
Phalcon\Session\Exception
to extend\Exception
存储¶
Phalcon\Storage\Adapter\AdapterInterface
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever
Phalcon\Storage\Adapter\Apcu
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever
Phalcon\Storage\Adapter\Libmemcached
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever
Phalcon\Storage\Adapter\Memory
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever
Phalcon\Storage\Adapter\Redis
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever - Added
timeout
,connectTimeout
,retryInterval
和readTimeout
for constructor options
Phalcon\Storage\Adapter\Stream
¶
- Added
setForever(string $key, mixed $value):
to set an item in the store forever
Phalcon\Storage\Serializer\AbstractSerializer
¶
- Added
__serialize()
和__unserialize()
新方法 - Added
isSuccess(): bool
to return when the data was serialized/unserialized successfully
Phalcon\Storage\Serializer\Base64
¶
- Changed
unserialize
to set the data to an empty string in case of a failure
Phalcon\Storage\Serializer\Igbinary
¶
- Changed
unserialize
to set the data to an empty string in case of a failure
Phalcon\Storage\Serializer\Msgpack
¶
- Changed
unserialize
to set the data to an empty string in case of a failure
Phalcon\Storage\Serializer\Php
¶
- Changed
unserialize
to set the data to an empty string in case of a failure
Phalcon\Storage\Serializer\*
¶
- Added stub serializers for Memcached and Redis when in need to use the built-in serializers for those storages:
Phalcon\Storage\Serializer\MemcachedIgbinary
Phalcon\Storage\Serializer\MemcachedJson
Phalcon\Storage\Serializer\MemcachedPhp
Phalcon\Storage\Serializer\RedisIgbinary
Phalcon\Storage\Serializer\RedisJson
Phalcon\Storage\Serializer\RedisMsgpack
Phalcon\Storage\Serializer\RedisNone
Phalcon\Storage\Serializer\RedisPhp
Phalcon\Storage\Exception
¶
- Changed
Phalcon\Storage\Exception
to extend\Exception
Phalcon\Storage\AdapterFactory
¶
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Storage\SerializerFactory
¶
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
支持¶
The Support
namespace contains classes that are used throughout the framework. The classes moved here are: - 集合 - 调试 - 辅助函数 - 注册表
Phalcon\Support\Collection
¶
- Moved
Phalcon\Collection
到Phalcon\Support\Collection
get()
will return thedefaultValue
如果没有使用key
is not set. It will also return thedefaultValue
如果没有使用key
is set and the value isnull
. This aligns with the 3.x behavior.
Phalcon\Support\Collection\CollectionInterface
¶
- A new interface has been introduced (
Phalcon\Support\Collection\CollectionInterface
) to offer more flexibility when extending the collection object.
Phalcon\Support\Collection\ReadOnlyCollection
¶
- 该类已从
ReadOnly
重命名,以避免与 PHP 8.x 的保留字冲突。
Phalcon\Support\Debug\Exception
¶
- Changed
Phalcon\Support\Debug\Exception
to extend\Exception
Phalcon\Support\Helper\Exception
¶
- Changed
Phalcon\Support\Helper\Exception
to extend\Exception
Phalcon\Helper\*
¶
Arr
,Fs
,Json
,Number
和Str
static classes have been removed and replaced with one class per method in the relevant namespace. For examplePhalcon\Helper\Arr::has()
is notPhalcon\Support\Helper\Arr\Has::__invoke()
- Added
Phalcon\Support\Helper\HelperFactory
service locator to easily create objects from thePhalcon\Support\Helper
namespace - Added
__call()
的调用Phalcon\Support\Helper\HelperFactory
to offer an easier access to objects i.e.$this->helperFactory->dirFromFile()
标签¶
Note, that this component will be removed in future versions of the framework.
Phalcon\Tag
¶
- Added
preload(mixed $parameters): string
to parse preloading link headers
文本¶
The Phalcon\Text
component has been deprecated. It has been replaced with the Phalcon\Support\HelperFactory
. 更多
翻译¶
Phalcon\Translate\Adapter\AbstractAdapter
¶
- Changed
__construct(InterpolatorFactory $interpolator, array $options = []
to default to an empty array for$options
Phalcon\Translate\Adapter\Csv
¶
- Marked as
@deprecated
exists()
- Added
has()
Phalcon\Translate\Adapter\Gettext
¶
- Marked as
@deprecated
exists()
- Added
has()
Phalcon\Translate\Adapter\NativeArray
¶
- Marked as
@deprecated
exists()
- Added
has()
- Added
toArray()
to return the translation array back
Phalcon\Translate\Exception
¶
- Changed
Phalcon\Translate\Exception
to extend\Exception
Phalcon\Translate\InterpolatorFactory
¶
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
Phalcon\Translate\TranslateFactory
¶
- The
getAdapters()
protected method has been renamed togetServices()
- A new protected method
getExceptionClass()
was introduced to return the exception class to throw from this factory when necessary
URL¶
The URL component has been moved to the Mvc
命名空间下。更多
验证¶
The 验证 component has been moved to the Filter
命名空间下。更多
版本¶
The 版本 component has been moved to the Support
命名空间下。更多
Volt¶
Since the tag
service has changed from Phalcon\Tag
到Phalcon\Html\TagFactory
several helper methods used in Volt have changed also. The biggest change is the form()
helper in Volt.
If you wish to keep your Volt code the way it is, without changing method signatures, you will have to rename your form()
calls to formLegacy()
. formLegacy()
will use the Phalcon\Tag
component as before. However, if you wish to use the new Phalcon\Html\TagFactory
component, you can keep the method call as is (i.e. form()
but you will need to change the signature of the helper method. 更多...