Upgrade Guide¶
Upgrading to V4¶
So you have decided to upgrade to v4! Congratulations!!
Phalcon v4 contains a lot of changes to components, including changes to interfaces, strict types, removal of components and additions of new ones. This document is an effort to help you upgrade your existing Phalcon application to v4. We will outline the areas that you need to pay attention to and make necessary alterations so that your code can run as smoothly as it has been with v3. Although the changes are significant, it is more of a methodical task than a daunting one.
Requirements¶
PHP 7.2¶
Phalcon v4 supports only PHP 7.2 and above. PHP 7.1 was released 2 years ago and its active support has lapsed, so we decided to follow actively supported PHP versions.
PSR¶
Phalcon requires the PSR extension. The extension can be downloaded and compiled from this GitHub repository. Installation instructions are available in the README of the repository. Once the extension has been compiled and is available in your system, you will need to load it to your php.ini. You will need to add this line:
before
Alternatively some distributions add a number prefix on ini files. If that is the case, choose a high number for Phalcon (e.g. 50-phalcon.ini).
Installation¶
Download the latest zephir.phar from here. Add it to a folder that can be accessed by your system.
Clone the repository
Compile Phalcon
Check the module
General Notes¶
Applications¶
- The
Phalcon\Mvc\Application,Phalcon\Mvc\MicroandPhalcon\Mvc\Routernow must have a URI to process
Exceptions¶
- Changed catch
ExceptiontoThrowable
Components¶
ACL¶
The ACL component has had some methods and components renamed. The functionality remains the same as in previous versions.
Overview¶
The components needed for the ACL to work have been renamed. In particular Resource has been renamed to Component in all relevant interfaces, classes and methods that this component uses.
- Added
Phalcon\Acl\Adapter\AbstractAdapter -
Added
Acl\Enum -
Removed
Phalcon\Acl -
Removed
Phalcon\Acl\Adapter -
Renamed
Phalcon\Acl\ResourcetoPhalcon\Acl\Component - Renamed
Phalcon\Acl\ResourceInterfacetoPhalcon\Acl\ComponentInterface - Renamed
Phalcon\Acl\ResourceAwaretoPhalcon\Acl\ComponentAware - Renamed
Phalcon\Acl\AdapterInterface::isResourcetoPhalcon\Acl\AdapterInterface::isComponent - Renamed
Phalcon\Acl\AdapterInterface::addResourcetoPhalcon\Acl\AdapterInterface::addComponent - Renamed
Phalcon\Acl\AdapterInterface::addResourceAccesstoPhalcon\Acl\AdapterInterface::addComponentAccess - Renamed
Phalcon\Acl\AdapterInterface::dropResourceAccesstoPhalcon\Acl\AdapterInterface::dropComponentAccess - Renamed
Phalcon\Acl\AdapterInterface::getActiveResourcetoPhalcon\Acl\AdapterInterface::getActiveComponent - Renamed
Phalcon\Acl\AdapterInterface::getResourcestoPhalcon\Acl\AdapterInterface::getComponents - Renamed
Phalcon\Acl\Adapter::getActiveResourcetoPhalcon\Acl\AdapterInterface::getActiveComponent - Renamed
Phalcon\Acl\Adapter\Memory::isResourcetoPhalcon\Acl\Adapter\Memory::isComponent - Renamed
Phalcon\Acl\Adapter\Memory::addResourcetoPhalcon\Acl\Adapter\Memory::addComponent - Renamed
Phalcon\Acl\Adapter\Memory::addResourceAccesstoPhalcon\Acl\Adapter\Memory::addComponentAccess - Renamed
Phalcon\Acl\Adapter\Memory::dropResourceAccesstoPhalcon\Acl\Adapter\Memory::dropComponentAccess - Renamed
Phalcon\Acl\Adapter\Memory::getResourcestoPhalcon\Acl\Adapter\Memory::getComponents
Acl\Adapter\Memory¶
- Added
getActiveKey,activeFunctionCustomArgumentsCountandgetActiveFunctionto get latest key, number of custom arguments, and function used to acquire access - Added
addOpertionsupport multiple inherited
Acl\Enum (Constants)¶
Example:
Assets¶
CSS and JS filters have been removed from the Assets component. Due to license limitations, the CSS and JS minifiers (filters) have been removed for v4. In future versions with the help of the community we can introduce these filters again. You can always implement your own using the supplied Phalcon\Assets\FilterInterface.
- Removed
Phalcon\Assets\Filters\CssMin - Removed
Phalcon\Assets\Filters\JsMin - Renamed
Phalcon\Assets\ResourcetoPhalcon\Assets\Asset - Renamed
Phalcon\Assets\ResourceInterfacetoPhalcon\Assets\AssetInterface - Renamed
Phalcon\Assets\Manager::addResourcetoPhalcon\Assets\Manager::addAsset - Renamed
Phalcon\Assets\Manager::addResourceByTypetoPhalcon\Assets\Manager::addAssetByType - Renamed
Phalcon\Assets\Manager::collectionResourcesByTypetoPhalcon\Assets\Manager::collectionAssetsByType
Cache¶
xcache, apc and memcache adapters have been deprecated and removed. The first two are not supported for PHP 7.2+. apc has been replaced with apcu and memcache can be replaced with the libmemcached one.
- Removed
Phalcon\Annotations\Adapter\Apc - Removed
Phalcon\Annotations\Adapter\Xcache - Removed
Phalcon\Cache\Backend\Apc - Removed
Phalcon\Cache\Backend\Memcache - Removed
Phalcon\Cache\Backend\Xcache - Removed
Phalcon\Mvc\Model\Metadata\Apc - Removed
Phalcon\Mvc\Model\Metadata\Memcache - Removed
Phalcon\Mvc\Model\Metadata\Xcache
The Cache component has been rewritten to comply with PSR-16. This allows you to use the Phalcon\Cache to any application that utilizes a PSR-16 cache, not just Phalcon based ones.
In v3, the cache was split into two components, the Frontend and the Backend. This did create a bit of confusion, but it was functional. In order to create a cache component you had to create the Frontend first and then inject that to the relevant Backend (which acted as an adapter also).
For v4, we rewrote the component completely. We first created a Storage class which is the basis of the Cache classes. We created Serializer classes whose sole responsibility is to serialize and unserialize the data before they are saved in the cache adapter and after they are retrieved. These classes are injected (based on the developer's choice) to an Adapter object which connects to a backend (Memcached, Redis etc.), while abiding by a common adapter interface.
The Cache class implements PSR-16 and accepts an adapter in its constructor, which in turn is doing all the heavy lifting with connecting to the back end and manipulating data.
For a more detailed explanation on how the new Cache component works, please visit the relevant page in our documentation.
Creating a Cache¶
<?php
use Phalcon\Cache;
use Phalcon\Cache\AdapterFactory;
use Phalcon\Storage\Serializer\SerializerFactory;
$serializerFactory = new SerializerFactory();
$adapterFactory = new AdapterFactory($serializerFactory);
$options = [
'defaultSerializer' => 'Json',
'lifetime' => 7200
];
$adapter = $adapterFactory->newInstance('apcu', $options);
$cache = new Cache($adapter);
Registering it in the DI
<?php
use Phalcon\Cache;
use Phalcon\Cache\AdapterFactory;
use Phalcon\Storage\Serializer\SerializerFactory;
$container = new Di();
$container->set(
'cache',
function () {
$options = [
'defaultSerializer' => 'Json',
'lifetime' => 7200
];
$adapter = (new AdapterFactory(new SerializerFactory()))
->newInstance('apcu', $options);
return new Cache($adapter);
}
);
CLI¶
Parameters¶
Parameters now behave the same way as MVC controllers. Whilst previously they all existed in the $params property, you can now name them appropriately:
use Phalcon\Cli\Task;
class MainTask extends Task
{
public function testAction(string $yourName, string $myName)
{
echo sprintf(
'Hello %s!' . PHP_EOL,
$yourName
);
echo sprintf(
'Best regards, %s' . PHP_EOL,
$myName
);
}
}
Cli\Console¶
- Removed
Phalcon\Cli\Console::addModulesin favor ofPhalcon\Cli\Console::registerModules
Cli\Router\RouteInterface¶
- Added
delimiter,getDelimiter
Cli\Dispatcher¶
- Added
getTaskSuffix(),setTaskSuffix()
Cli\DispatcherInterface¶
- Added
setOptions,getOptions
Container¶
- Added
Phalcon\Container, a proxy container class to thePhalcon\DIimplementing PSR-11
Debug¶
- Removed
Phalcon\Debug::getMajorVersion
Db¶
- Added global setting
orm.case_insensitive_column_mapto attempt to find value in the column map case-insensitively. Can be also enabled by settingcaseInsensitiveColumnMapkey in\Phalcon\Mvc\Model::setup() - Removed
Phalcon\Dbnamespace. Replaced byPhalcon\Db\AbstractDbfor necessary methods andPhalcon\Db\Enumfor constants, i.e.:
Db\AdapterInterface¶
- Added
fetchColumn,insertAsDict,updateAsDict
Db\Adapter\Pdo¶
- Added more column types for the Mysql adapter. The adapters support
TYPE_BIGINTEGERTYPE_BITTYPE_BLOBTYPE_BOOLEANTYPE_CHARTYPE_DATETYPE_DATETIMETYPE_DECIMALTYPE_DOUBLETYPE_ENUMTYPE_FLOATTYPE_INTEGERTYPE_JSONTYPE_JSONBTYPE_LONGBLOBTYPE_LONGTEXTTYPE_MEDIUMBLOBTYPE_MEDIUMINTEGERTYPE_MEDIUMTEXTTYPE_SMALLINTEGERTYPE_TEXTTYPE_TIMETYPE_TIMESTAMPTYPE_TINYBLOBTYPE_TINYINTEGERTYPE_TINYTEXTTYPE_VARCHARSome adapters do not support certain types. For instanceJSONis not supported forSqlite. It will be automatically changed toVARCHAR.
Db\DialectInterface¶
- Added
registerCustomFunction,getCustomFunctions,getSqlExpression
Db\Dialect\Postgresql¶
- Changed
addPrimaryKeyto make primary key constraints names unique by prefixing them with the table name.
DI¶
Di\ServiceInterface¶
- Added
getParameter,isResolved
Di\Service¶
- Changed
Phalcon\Di\Serviceconstructor to no longer takes the name of the service.
Dispatcher¶
- Removed
Phalcon\Dispatcher::setModelBinding()in favor ofPhalcon\Dispatcher::setModelBinder() - Added
getHandlerSuffix(),setHandlerSuffix()
Events¶
Events\ManagerInterface¶
- Added
hasListeners
Flash¶
- Added ability to set a custom template for the Flash Messenger.
- Constructor no longer accepts an array for the CSS classes. You will need to use
setCssClasses()to set your custom CSS classes for the component - The constructor now accepts an optional
Phalcon\Escaperobject, as well as aPhalcon\Session\Managerobject (in the case ofPhalcon\Flash\Session), in case you do not wish to use the DI and set it yourself.
Filter¶
The Filter component has been rewritten, utilizing a service locator. Each sanitizer is now enclosed on its own class and lazy loaded to provide maximum performance and the lowest resource usage as possible.
Overview¶
The Phalcon\Filter class has been rewritten to act as a service locator for different sanitizers. This object allows you to sanitize input as before using the sanitize() method.
The values sanitized are automatically cast to the relevant types. This is the default behavior for the int, bool and float filters.
When instantiating the filter object, it does not know about any sanitizers. You have two options:
Load All the Default Sanitizers¶
You can load all the Phalcon supplied sanitizers by utilizing the Phalcon\Filter\FilterFactory component.
<?php
use Phalcon\Filter\FilterFactory;
$factory = new FilterFactory();
$locator = $factory->newInstance();
newInstance() will return a Phalcon\Filter object with all the sanitizers registered. The sanitizers are lazy loaded so they are instantiated only when called from the locator. Load Only Sanitizers You Want¶
You can instantiate the Phalcon\Filter component and either use the set() method to set all the sanitizers you need, or pass an array in the constructor with the sanitizers you want to register.
Using the FactoryDefault¶
If you use the Phalcon\Di\FactoryDefault container, then the Phalcon\Filter is automatically loaded in the container. You can then continue to use the service in your controllers or components as you did before. The name of the service in the Di is filter, just as before.
Also components that utilize the filter service, such as the Request object, transparently use the new filter locator. No additional changes required for those components.
Using a Custom Di¶
If you have set up all the services in the Phalcon\Di yourself and need the filter service, you will need to change its registration as follows:
<?php
use Phalcon\Di;
use Phalcon\Filter\FilterFactory;
$container = new Di();
$container->set(
'filter',
function () {
$factory = new FilterFactory();
return $factory->newInstance();
}
);
NOTE
Note that even if you register the filter service manually, the name of the service must be filter so that other components can use it
Constants¶
The constants that the v3 Phalcon\Filter have somewhat changed.
Removed¶
FILTER_INT_CAST(int!)FILTER_FLOAT_CAST(float!)
By default the service sanitizers cast the value to the appropriate type so these are obsolete
FILTER_APHANUMhas been removed - replaced byFILTER_ALNUM
Changed¶
FILTER_SPECIAL_CHARShas changed been removed - replaced byFILTER_SPECIALFILTER_ALNUM- replacedFILTER_ALPHANUMFILTER_ALPHA- sanitize only alpha charactersFILTER_BOOL- sanitize boolean including "yes", "no", etc.FILTER_LOWERFIRST- sanitze usinglcfirstFILTER_REGEX- sanitize based on a pattern (preg_replace)FILTER_REMOVE- sanitize by removing characters (str_replace)FILTER_REPLACE- sanitize by replacing characters (str_replace)FILTER_SPECIAL- replacedFILTER_SPECIAL_CHARSFILTER_SPECIALFULL- sanitize special chars (filter_var)FILTER_UPPERFIRST- sanitize usingucfirstFILTER_UPPERWORDS- sanitize usingucwords
Forms¶
Forms\Form¶
Phalcon\Forms\Form::clearwill no longer callPhalcon\Forms\Element::clear, instead it will clear/set default value itself, andPhalcon\Forms\Element::clearwill now callPhalcon\Forms\Form::clearif it’s assigned to the form, otherwise it will just clear itself.Phalcon\Forms\Form::getValuewill now also try to get the value by callingTag::getValueor element’sgetDefaultmethod before returningnull, andPhalcon\Forms\Element::getValuecallsTag::getDefaultonly if it’s not added to the form.
Html¶
Html\Breadcrumbs¶
- Added
Phalcon\Html\Breadcrumbs, a component that creates HTML code for breadcrumbs.
Html\Tag¶
- Added
Phalcon\Html\Tag, a component that creates HTML elements. It will replacePhalcon\Tagin a future version. This component does not use static method calls.
Http\RequestInterface¶
- Removed
isSecureRequestin favor ofisSecure - Removed
isSoapRequestedin favor ofisSoap
Http\Response¶
- Added
hasHeader()method toPhalcon\Http\Responseto provide the ability to check if a header exists. - Added
Phalcon\Http\Response\Cookies::getCookies - Changed
setHeadersnow merges the headers with any pre-existing ones in the internal collection - Added two new events
response::beforeSendHeadersandresponse::afterSendHeaders
Image¶
- Added
Phalcon\Image\Enum - Renamed
Phalcon\Image\AdaptertoPhalcon\Image\Adapter\AbstractAdapter - Renamed
Phalcon\Image\FactorytoPhalcon\Image\ImageFactory - Removed
Phalcon\Image
Image\Enum (Constants)¶
Example:
<?php
use Phalcon\Image\Enum;
// Resizing constraints
echo Enum::AUTO; // prints 4
echo Enum::HEIGHT; // prints 3
echo Enum::INVERSE; // prints 5
echo Enum::NONE; // prints 1
echo Enum::PRECISE; // prints 6
echo Enum::TENSILE; // prints 7
echo Enum::WIDTH; // prints 2
// Flipping directions
echo Enum::HORIZONTAL; // prints 11
echo Enum::VERTICAL; // prints 12
Logger¶
The Logger component has been rewritten to comply with PSR-3. This allows you to use the Phalcon\Logger to any application that utilizes a PSR-3 logger, not just Phalcon based ones.
In v3, the logger was incorporating the adapter in the same component. So in essence when creating a logger object, the developer was creating an adapter (file, stream etc.) with logger functionality.
For v4, we rewrote the component to implement only the logging functionality and to accept one or more adapters that would be responsible for doing the work of logging. This immediately offers compatibility with PSR-3 and separates the responsibilities of the component. It also offers an easy way to attach more than one adapter to the logging component so that logging to multiple adapters can be achieved. By using this implementation we have reduced the code necessary for this component and removed the old Logger\Multiple component.
Creating a Logger Component¶
<?php
use Phalcon\Logger;
use Phalcon\Logger\Adapter\Stream;
$adapter = new Stream('/logs/application.log');
$logger = new Logger(
'messages',
[
'main' => $adapter,
]
);
$logger->error('Something went wrong');
Registering it in the DI
<?php
use Phalcon\Di;
use Phalcon\Logger;
use Phalcon\Logger\Adapter\Stream;
$container = new Di();
$container->set(
'logger',
function () {
$adapter = new Stream('/logs/application.log');
$logger = new Logger(
'messages',
[
'main' => $adapter,
]
);
return $logger;
}
);
Multiple Loggers¶
The Phalcon\Logger\Multiple component has been removed. You can achieve the same functionality using the logger component and registering more than one adapter:
<?php
use Phalcon\Logger;
use Phalcon\Logger\Adapter\Stream;
$adapter1 = new Stream('/logs/first-log.log');
$adapter2 = new Stream('/remote/second-log.log');
$adapter3 = new Stream('/manager/third-log.log');
$logger = new Logger(
'messages',
[
'local' => $adapter1,
'remote' => $adapter2,
'manager' => $adapter3,
]
);
// Log to all adapters
$logger->error('Something went wrong');
Messages¶
Phalcon\Messages\Messageand its collectionPhalcon\Messages\Messagesare new components that handle messages for models and validation. In the past we had two components, one for validation and one for models. We have merged these two, so you should be getting back aMessageInterface[]back when callingsaveon a model or when retrieving validation messages.- Changed
Phalcon\Mvc\Modelto use thePhalcon\Messages\Messageobject for its messages - Changed
Phalcon\Validation\*to use thePhalcon\Messages\Messageobject for its messages
- Changed
Transactions¶
Removed in version 4.0:
- Removed
$logger->begin() - Removed
$logger->commit()
Log Level¶
- Removed
$logger->setLogLevel()
Models¶
- You can no longer assign data to models while saving them
Initialization¶
The getSource() method has been marked as final. As such you can no longer override this method in your model to set the corresponding table/source of the RDBMS. Instead, you can now use the initialize() method and setSource() to set the source of your model.
<?php
use Phalcon\Mvc\Model;
class Users
{
public function initialize()
{
$this->setSource('Users');
// ....
}
}
Save¶
The save() method no longer accepts parameters to set data. You can use assign instead.
Criteria¶
The second parameter of Criteria::limit() ('offset') must now be an integer or null. Previously there was no type requirement.
MVC¶
Mvc\Collection¶
- Removed
Phalcon\Mvc\Collection::validationHasFailed - Removed calling
Phalcon\Mvc\Collection::validatewith object of typePhalcon\Mvc\Model\ValidatorInterface
Mvc\Micro\Lazyloader¶
- Removed
__callin favor ofcallMethod
Mvc\Model¶
- Removed
Phalcon\Model::reset - Added
isRelationshipLoadedto check if relationship is loaded - Changed
Phalcon\Model::assignparameters order to$data,$whiteList,$dataColumnMap - Changed
Phalcon\Model::findFirstto returnnullinstead offalseif no record was found - Changed
Phalcon\Model::getRelated()to returnnullfor one to one relationships if no record was found
Mvc\Model\Criteria¶
- Removed
addWhere - Removed
order - Removed
orderin favor oforderBy
Mvc\Model\CriteriaInterface¶
- Added
distinct,leftJoin,innerJoin,rightJoin,groupBy,having,cache,getColumns,getGroupBy,getHaving
Mvc\Model\Manager¶
Loadno longer reuses already initialized models- Removed
Phalcon\Model\Manager::registerNamespaceAlias() - Removed
Phalcon\Model\Manager::getNamespaceAlias() - Removed
Phalcon\Model\Manager::getNamespaceAliases() - The signature of
Phalcon\Mvc\Model\Manager::getRelationRecords()has changed - The signature of
Phalcon\Mvc\Model\Manager::getBelongsToRecords()has changed - The signature of
Phalcon\Mvc\Model\Manager::getHasOneRecords()has changed - The signature of
Phalcon\Mvc\Model\Manager::getHasManyRecords()has changed
Mvc\Model\ManagerInterface¶
- Added
isVisibleModelProperty,keepSnapshots,isKeepingSnapshots,useDynamicUpdate,isUsingDynamicUpdate,addHasManyToMany,existsHasManyToMany,getRelationRecords,getHasManyToMany - Removed
Phalcon\Model\ManagerInterface::getNamespaceAlias() - Removed
Phalcon\Model\ManagerInterface::registerNamespaceAlias()
Mvc\Model\MessageInterface¶
- Added
setModel,getModel,setCode,getCode
Mvc\Model\QueryInterface¶
- Added
getSingleResult,setBindParams,getBindParams,setBindTypes,setSharedLock,getBindTypes,getSql
Mvc\Model\Query\BuilderInterface¶
- Added
offset
Mvc\Model\Query\Builder¶
- Added bind support. The Query Builder has the same methods as
Phalcon\Mvc\Model\Query;getBindParams,setBindParams,getBindTypesandsetBindTypes. - Changed
addFromto remove third parameter$with
Mvc\Model\Query\BuilderInterface¶
- Added
distinct,getDistinct,forUpdate,offset,getOffset
Mvc\Model\RelationInterface¶
- Added
getParams
Mvc\Model\ResultsetInterface¶
- Added
setHydrateMode,getHydrateMode,getMessages,update,delete,filter
Mvc\Model\Transaction\ManagerInterface¶
- Added
setDbService,getDbService,setRollbackPendent,getRollbackPendent
Mvc\Model\Validator*¶
- Removed
Phalcon\Mvc\Model\Validator\*in favor ofPhalcon\Validation\Validator\*
Mvc\ModelInterface¶
- Added
getModelsMetaData
Mvc\Router¶
- Removed
getRewriteUri(). The URI needs to be passed in thehandlemethod of the application object.
Mvc\RouterInterface¶
- Added
attach
Mvc\Router\RouteInterface¶
- Added
convertso that callingaddwill return an instance that hasconvertmethod
Mvc\Router\RouteInterface¶
- Added response handler to
Phalcon\Mvc\Micro,Phalcon\Mvc\Micro::setResponseHandler, to allow use of a custom response handler.
Mvc\User¶
- Removed
Phalcon\Mvc\User\Component- usePhalcon\Di\Injectableinstead - Removed
Phalcon\Mvc\User\Module- usePhalcon\Di\Injectableinstead - Removed
Phalcon\Mvc\User\Plugin- usePhalcon\Di\Injectableinstead
Mvc\View\Engine\Volt¶
The options for Volt have changed (the key names). Using the old syntax will produce a deprecation warning. The new options are:
always- Always compileextension- Extension of filesseparator- Separator (used for the folders/routes)stat- Stat each file before trying to use itpath- The path of the filesprefix- The prefix of the files
Paginator¶
getPaginatenow becomespaginate$beforeis removed and replaced with$previous$total_pagesis removed since it contained the same information as$last- Added
Phalcon\Paginator\RepositoryInterfacefor repository the current state ofpaginatorand also optional sets the aliases for properties repository
Router¶
- Removed
getRewriteUri(). The URI needs to be passed in thehandlemethod of the application object. - You can add
CONNECT,PURGE,TRACEroutes to the Router Group. They function the same as they do in the normal Router:
use Phalcon\Mvc\Router\Group;
$group = new Group();
$group->addConnect(
'/api',
[
'controller' => 'api',
'action' => 'connect',
]
);
$group->addPurge(
'/api',
[
'controller' => 'api',
'action' => 'purge',
]
);
$group->addTrace(
'/api',
[
'controller' => 'api',
'action' => 'trace',
]
);
Security¶
- Removed
hasLibreSsl - Removed
getSslVersionNumber - Added
setPadding - Added a retainer for the current token to be used during the checks, so when
getTokenis called the token used for checks does not change
Request¶
Http\Request¶
- Added
numFilesreturninglong- the number of files present in the request - Changed
hasFilesto returnbool- if the request has files or not
Http\RequestInterface¶
- Added
numFilesreturningint- the number of files present in the request - Changed
hasFilesto returnbool- if the request has files or not
Session¶
Session and Session\Bag no longer get loaded by default in Phalcon\DI\FactoryDefault. Session was refactored.
- Added
Phalcon\Session\Adapter\AbstractAdapter - Added
Phalcon\Session\Adapter\Noop - Added
Phalcon\Session\Adapter\Stream - Added
Phalcon\Session\Manager - Added
Phalcon\Session\ManagerInterface - Removed
Phalcon\Session\Adapter- replaced byPhalcon\Session\Adapter\AbstractAdapter - Removed
Phalcon\Session\AdapterInterface- replaced by nativeSessionHandlerInterface - Removed
Phalcon\Session\Adapter\Files- replaced byPhalcon\Session\Adapter\Stream - Removed
Phalcon\Session\Adapter\Memcache - Removed
Phalcon\Session\BagInterface - Removed
Phalcon\Session\Factory
Session\Adapter¶
Each adapter implements PHP's SessionHandlerInterface. Available adapters are:
Phalcon\Session\Adapter\AbstractAdapterPhalcon\Session\Adapter\LibmemcachedPhalcon\Session\Adapter\NoopPhalcon\Session\Adapter\RedisPhalcon\Session\Adapter\Stream
Session\Manager¶
- Now is the single component that offers session manipulation by using adapters (see above). Each adapter implements PHP's
SessionHandlerInterface - Developers can add any adapter that implements
SessionHandlerInterface
Tag¶
- Added
renderTitle()that renders the title enclosed in<title>tags. - Changed
getTitle. It returns only the text. It acceptsprepend,appendbooleans to prepend or append the relevant text to the title. - Changed
textAreato usehtmlspecialcharsto prevent XSS injection.
Text¶
The Phalcon\Text component has been removed in favor of the Phalcon\Helper\Str. The functionality offered by Phalcon\Text in v3 is replicated and enhanced in the new class: Phalcon\Helper\Str.
Validation¶
Validation\Message¶
- Removed
Phalcon\Validation\MessageandPhalcon\Mvc\Model\Messagein favor ofPhalcon\Messages\Message - Removed
Phalcon\Validation\MessageInterfaceandPhalcon\Mvc\Model\MessageInterfacein favor ofPhalcon\Messages\MessageInterface - Removed
Phalcon\Validation\Message\Groupin favor ofPhalcon\Messages\Messages - Validator messages have been moved inside each validator
Validation\Validator¶
- Removed
isSetOption
Validation\Validator\Ip¶
- Added
Phalcon\Validation\Validator\Ip, class used to validate ip address fields. It allows to validate a field selecting IPv4 or IPv6, allowing private or reserved ranges and empty values if necessary.
Views¶
View caching along with the viewCache service have been removed from the framework because they were incompatible with the new Cache component. Developers can easily utilize a view cache from external services such as Varnish, Cloudflare etc. Additionally, developers can cache fragments by either using the Phalcon\Mvc\View\Simple::render() or the Phalcon\Mvc\View::toString(). Those two methods return the produced HTML that can be cached in the cache backend of your choice.
Url¶
The Phalcon\Mvc\Url component has been renamed to Phalcon\Url. The functionality remains the same.
Cheat Sheet¶
Acl¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Acl | Removed | |
| Phalcon\Acl\Adapter | Renamed to | Phalcon\Acl\Adapter\AbstractAdapter |
| Phalcon\Acl\Resource | Renamed to | Phalcon\Acl\Component |
| New | Phalcon\Acl\Enum |
Annotations¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Annotations\Adapter | Renamed to | Phalcon\Annotations\Adapter\AbstractAdapter |
| Phalcon\Annotations\Adapter\Apc | Removed | |
| Phalcon\Annotations\Adapter\Files | Renamed to | Phalcon\Annotations\Adapter\Stream |
| Phalcon\Annotations\Adapter\Xcache | Removed | |
| Phalcon\Annotations\Factory | Renamed to | Phalcon\Annotations\AnnotationsFactory |
Application¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Application | Renamed to | Phalcon\Application\AbstractApplication |
Assets¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Assets\Resource | Renamed to | Phalcon\Assets\Asset |
| Phalcon\Assets\Resource\Css | Renamed to | Phalcon\Assets\Asset\Css |
| Phalcon\Assets\Resource\Js | Renamed to | Phalcon\Assets\Asset\Js |
Cache¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Cache\Backend\Apc | Removed | |
| Phalcon\Cache\Backend | Renamed to | Phalcon\Cache |
| Phalcon\Cache\Backend\Factory | Renamed to | Phalcon\Cache\AdapterFactory |
| Phalcon\Cache\Backend\Apcu | Renamed to | Phalcon\Cache\Adapter\Apcu |
| Phalcon\Cache\Backend\File | Renamed to | Phalcon\Cache\Adapter\Stream |
| Phalcon\Cache\Backend\Libmemcached | Renamed to | Phalcon\Cache\Adapter\Libmemcached |
| Phalcon\Cache\Backend\Memcache | Removed | |
| Phalcon\Cache\Backend\Memory | Renamed to | Phalcon\Cache\Adapter\Memory |
| Phalcon\Cache\Backend\Mongo | Removed | |
| Phalcon\Cache\Backend\Redis | Renamed to | Phalcon\Cache\Adapter\Redis |
| New | Phalcon\Cache\CacheFactory | |
| Phalcon\Cache\Backend\Xcache | Removed | |
| Phalcon\Cache\Exception | Renamed to | Phalcon\Cache\Exception\Exception |
| New | Phalcon\Cache\Exception\InvalidArgumentException | |
| Phalcon\Cache\Frontend\Base64 | Removed | |
| Phalcon\Cache\Frontend\Data | Removed | |
| Phalcon\Cache\Frontend\Factory | Removed | |
| Phalcon\Cache\Frontend\Igbinary | Removed | |
| Phalcon\Cache\Frontend\Json | Removed | |
| Phalcon\Cache\Frontend\Msgpack | Removed | |
| Phalcon\Cache\Frontend\None | Removed | |
| Phalcon\Cache\Frontend\Output | Removed | |
| Phalcon\Cache\Multiple | Removed |
Collection¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Collection | |
| New | Phalcon\Collection\Exception | |
| New | Phalcon\Collection\ReadOnly |
Config¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Config\Factory | Renamed to | Phalcon\Config\ConfigFactory |
Container¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Container |
Db¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Db | Renamed to | Phalcon\Db\AbstractDb |
| Phalcon\Db\Adapter | Renamed to | Phalcon\Db\Adapter\AbstractAdapter |
| Phalcon\Db\Adapter\Pdo | Renamed to | Phalcon\Db\Adapter\Pdo\AbstractPdo |
| Phalcon\Db\Adapter\Pdo\Factory | Renamed to | Phalcon\Db\Adapter\PdoFactory |
| New | Phalcon\Db\Enum |
Dispatcher¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Dispatcher | Renamed to | Phalcon\Dispatcher\AbstractDispatcher |
| New | Phalcon\Dispatcher\Exception |
Di¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Di\AbstractInjectionAware | |
| New | Phalcon\Di\Exception\ServiceResolutionException |
Domain¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Domain\Payload\Payload | |
| New | Phalcon\Domain\Payload\PayloadFactory | |
| New | Phalcon\Domain\Payload\Status |
Factory¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Factory | Renamed to | Phalcon\Factory\AbstractFactory |
Filter¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Filter\FilterFactory | |
| New | Phalcon\Filter\Sanitize\AbsInt | |
| New | Phalcon\Filter\Sanitize\Alnum | |
| New | Phalcon\Filter\Sanitize\Alpha | |
| New | Phalcon\Filter\Sanitize\BoolVal | |
| New | Phalcon\Filter\Sanitize\Email | |
| New | Phalcon\Filter\Sanitize\FloatVal | |
| New | Phalcon\Filter\Sanitize\IntVal | |
| New | Phalcon\Filter\Sanitize\Lower | |
| New | Phalcon\Filter\Sanitize\LowerFirst | |
| New | Phalcon\Filter\Sanitize\Regex | |
| New | Phalcon\Filter\Sanitize\Remove | |
| New | Phalcon\Filter\Sanitize\Replace | |
| New | Phalcon\Filter\Sanitize\Special | |
| New | Phalcon\Filter\Sanitize\SpecialFull | |
| New | Phalcon\Filter\Sanitize\StringVal | |
| New | Phalcon\Filter\Sanitize\Striptags | |
| New | Phalcon\Filter\Sanitize\Trim | |
| New | Phalcon\Filter\Sanitize\Upper | |
| New | Phalcon\Filter\Sanitize\UpperFirst | |
| New | Phalcon\Filter\Sanitize\UpperWords | |
| New | Phalcon\Filter\Sanitize\Url |
Flash¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Flash | Renamed to | Phalcon\Flash\AbstractFlash |
Forms¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Forms\Element | Renamed to | Phalcon\Forms\Element\AbstractElement |
Helper¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Helper\Arr | |
| New | Phalcon\Helper\Exception | |
| New | Phalcon\Helper\Fs | |
| New | Phalcon\Helper\Json | |
| New | Phalcon\Helper\Number | |
| New | Phalcon\Helper\Str |
Html¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Html\Attributes | |
| New | Phalcon\Html\Breadcrumbs | |
| New | Phalcon\Html\Exception | |
| New | Phalcon\Html\Helper\AbstractHelper | |
| New | Phalcon\Html\Helper\Anchor | |
| New | Phalcon\Html\Helper\AnchorRaw | |
| New | Phalcon\Html\Helper\Body | |
| New | Phalcon\Html\Helper\Button | |
| New | Phalcon\Html\Helper\Close | |
| New | Phalcon\Html\Helper\Element | |
| New | Phalcon\Html\Helper\ElementRaw | |
| New | Phalcon\Html\Helper\Form | |
| New | Phalcon\Html\Helper\Img | |
| New | Phalcon\Html\Helper\Label | |
| New | Phalcon\Html\Helper\TextArea | |
| New | Phalcon\Html\Link\EvolvableLink | |
| New | Phalcon\Html\Link\EvolvableLinkProvider | |
| New | Phalcon\Html\Link\Link | |
| New | Phalcon\Html\Link\LinkProvider | |
| New | Phalcon\Html\Link\Serializer\Header | |
| New | Phalcon\Html\TagFactory |
Http¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Http\Message\AbstractCommon | |
| New | Phalcon\Http\Message\AbstractMessage | |
| New | Phalcon\Http\Message\AbstractRequest | |
| New | Phalcon\Http\Message\Exception\InvalidArgumentException | |
| New | Phalcon\Http\Message\Request | |
| New | Phalcon\Http\Message\RequestFactory | |
| New | Phalcon\Http\Message\Response | |
| New | Phalcon\Http\Message\ResponseFactory | |
| New | Phalcon\Http\Message\ServerRequest | |
| New | Phalcon\Http\Message\ServerRequestFactory | |
| New | Phalcon\Http\Message\Stream | |
| New | Phalcon\Http\Message\StreamFactory | |
| New | Phalcon\Http\Message\Stream\Input | |
| New | Phalcon\Http\Message\Stream\Memory | |
| New | Phalcon\Http\Message\Stream\Temp | |
| New | Phalcon\Http\Message\UploadedFile | |
| New | Phalcon\Http\Message\UploadedFileFactory | |
| New | Phalcon\Http\Message\Uri | |
| New | Phalcon\Http\Message\UriFactory | |
| New | Phalcon\Http\Server\AbstractMiddleware | |
| New | Phalcon\Http\Server\AbstractRequestHandler |
Image¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Image | Removed | |
| Phalcon\Image\Adapter | Renamed to | Phalcon\Image\Adapter\AbstractAdapter |
| New | Phalcon\Image\Enum | |
| Phalcon\Image\Factory | Renamed to | Phalcon\Image\ImageFactory |
Logger¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Logger\AdapterFactory | |
| Phalcon\Logger\Adapter | Renamed to | Phalcon\Logger\Adapter\AbstractAdapter |
| Phalcon\Logger\Adapter\Blackhole | Renamed to | Phalcon\Logger\Adapter\Noop |
| Phalcon\Logger\Adapter\File | Renamed to | Phalcon\Logger\Adapter\Stream |
| Phalcon\Logger\Adapter\Firephp | Removed | |
| Phalcon\Logger\Factory | Renamed to | Phalcon\Logger\LoggerFactory |
| Phalcon\Logger\Formatter | Renamed to | Phalcon\Logger\Formatter\AbstractFormatter |
| Phalcon\Logger\Formatter\Firephp | Removed | |
| Phalcon\Logger\Formatter\Syslog | Removed | |
| Phalcon\Logger\Multiple | Removed |
Message (new in V4, Formerly Phalcon\Validation\Message in 3.4)¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Messages\Exception | |
| New | Phalcon\Messages\Message | |
| New | Phalcon\Messages\Messages |
Mvc¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Mvc\Collection | Renamed to | Phalcon\Collection |
| Phalcon\Mvc\Collection\Behavior | Removed | |
| Phalcon\Mvc\Collection\Behavior\SoftDelete | Removed | |
| Phalcon\Mvc\Collection\Behavior\Timestampable | Removed | |
| Phalcon\Mvc\Collection\Document | Removed | |
| Phalcon\Mvc\Collection\Exception | Renamed to | Phalcon\Collection\Exception |
| Phalcon\Mvc\Collection\Manager | Removed | |
| New | Phalcon\Collection\ReadOnly | |
| Phalcon\Mvc\Model\Message | Renamed to | Phalcon\Messages\Message |
| Phalcon\Mvc\Model\MetaData\Apc | Removed | |
| Phalcon\Mvc\Model\MetaData\Files | Renamed to | Phalcon\Mvc\Model\MetaData\Stream |
| Phalcon\Mvc\Model\MetaData\Memcache | Removed | |
| Phalcon\Mvc\Model\MetaData\Session | Removed | |
| Phalcon\Mvc\Model\MetaData\Xcache | Removed | |
| Phalcon\Mvc\Model\Validator | Renamed to | Phalcon\Validation\Validator |
| Phalcon\Mvc\Model\Validator\Email | Renamed to | Phalcon\Validation\Validator\Email |
| Phalcon\Mvc\Model\Validator\Exclusionin | Renamed to | Phalcon\Validation\Validator\ExclusionIn |
| Phalcon\Mvc\Model\Validator\Inclusionin | Renamed to | Phalcon\Validation\Validator\InclusionIn |
| Phalcon\Mvc\Model\Validator\Ip | Renamed to | Phalcon\Validation\Validator\Ip |
| Phalcon\Mvc\Model\Validator\Numericality | Renamed to | Phalcon\Validation\Validator\Numericality |
| Phalcon\Mvc\Model\Validator\PresenceOf | Renamed to | Phalcon\Validation\Validator\PresenceOf |
| Phalcon\Mvc\Model\Validator\Regex | Renamed to | Phalcon\Validation\Validator\Regex |
| Phalcon\Mvc\Model\Validator\StringLength | Renamed to | Phalcon\Validation\Validator\StringLength |
| Phalcon\Mvc\Model\Validator\Uniqueness | Renamed to | Phalcon\Validation\Validator\Uniqueness |
| Phalcon\Mvc\Model\Validator\Url | Renamed to | Phalcon\Validation\Validator\Url |
| Phalcon\Mvc\Url | Renamed to | Phalcon\Url |
| Phalcon\Mvc\Url\Exception | Renamed to | Phalcon\Url\Exception |
| Phalcon\Mvc\User\Component | Renamed to | Phalcon\Di\Injectable |
| Phalcon\Mvc\User\Module | Renamed to | Phalcon\Di\Injectable |
| Phalcon\Mvc\User\Plugin | Renamed to | Phalcon\Di\Injectable |
| Phalcon\Mvc\View\Engine | Renamed to | Phalcon\Mvc\View\Engine\AbstractEngine |
Paginator¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Paginator\Adapter | Renamed to | Phalcon\Paginator\Adapter\AbstractAdapter |
| Phalcon\Paginator\Factory | Renamed to | Phalcon\Paginator\PaginatorFactory |
| New | Phalcon\Paginator\Repository |
Queue¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Queue\Beanstalk | Removed | |
| Phalcon\Queue\Beanstalk\Exception | Removed | |
| Phalcon\Queue\Beanstalk\Job | Removed |
Session¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Session\Adapter | Renamed to | Phalcon\Session\Adapter\AbstractAdapter |
| Phalcon\Session\Adapter\Files | Renamed to | Phalcon\Session\Adapter\Stream |
| New | Phalcon\Session\Adapter\Noop | |
| Phalcon\Session\Adapter\Memcache | Removed | |
| Phalcon\Session\Factory | Renamed to | Phalcon\Session\Manager |
Storage¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Storage\AdapterFactory | |
| New | Phalcon\Storage\Adapter\AbstractAdapter | |
| New | Phalcon\Storage\Adapter\Apcu | |
| New | Phalcon\Storage\Adapter\Libmemcached | |
| New | Phalcon\Storage\Adapter\Memory | |
| New | Phalcon\Storage\Adapter\Redis | |
| New | Phalcon\Storage\Adapter\Stream | |
| New | Phalcon\Storage\Exception | |
| New | Phalcon\Storage\SerializerFactory | |
| New | Phalcon\Storage\Serializer\AbstractSerializer | |
| New | Phalcon\Storage\Serializer\Base64 | |
| New | Phalcon\Storage\Serializer\Igbinary | |
| New | Phalcon\Storage\Serializer\Json | |
| New | Phalcon\Storage\Serializer\Msgpack | |
| New | Phalcon\Storage\Serializer\None | |
| New | Phalcon\Storage\Serializer\Php |
Translate¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Translate | Removed | |
| Phalcon\Translate\Adapter | Renamed to | Phalcon\Translate\Adapter\AbstractAdapter |
| New | Phalcon\Translate\InterpolatorFactory | |
| Phalcon\Translate\Factory | Renamed to | Phalcon\Translate\TranslateFactory |
Url¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| New | Phalcon\Url | |
| New | Phalcon\Url\Exception |
Validation¶
| 3.4.x | State | 4.0.x |
|---|---|---|
| Phalcon\Validation\CombinedFieldsValidator | Renamed to | Phalcon\Validation\AbstractCombinedFieldsValidator |
| Phalcon\Validation\Message | Renamed to | Phalcon\Messages\Message |
| Phalcon\Validation\Message\Group | Renamed to | Phalcon\Messages\Messages |
| Phalcon\Validation\Validator | Renamed to | Phalcon\Validation\AbstractValidator |
| New | Phalcon\Validation\AbstractValidatorComposite | |
| New | Phalcon\Validation\Exception | |
| New | Phalcon\Validation\ValidatorFactory | |
| New | Phalcon\Validation\Validator\File\AbstractFile | |
| New | Phalcon\Validation\Validator\File\MimeType | |
| New | Phalcon\Validation\Validator\File\Resolution\Equal | |
| New | Phalcon\Validation\Validator\File\Resolution\Max | |
| New | Phalcon\Validation\Validator\File\Resolution\Min | |
| New | Phalcon\Validation\Validator\File\Size\Equal | |
| New | Phalcon\Validation\Validator\File\Size\Max | |
| New | Phalcon\Validation\Validator\File\Size\Min | |
| New | Phalcon\Validation\Validator\StringLength\Max | |
| New | Phalcon\Validation\Validator\StringLength\Min |