Deprecated Code Reference (ongoing)
This doc holds a reference list of commonly used code that is deprecated, and their replacements. These functions may still work and exist now, but can be removed from future versions of Concrete CMS and thus cause problems in the future.
This is a work in progress. This list will change as new functions are found and new versions are released.
Note:
In the replacements you will sometimes find references to $app. You can access the application in some controllers with $this->app, or if it’s not available, retrieve it with:
$app = \Concrete\Core\Support\Facade\Application::getFacadeApplication();
Using $app may result in faster code.
Class Aliases
Version 5.7 introduced class aliases to make some of the commonly used core code easily available for developers. This idea was mostly due to the old 5.6 architecture where this was very common. This has, however, caused more confusion than benefit since people are finding it hard to follow where the code originates from.
Therefore, class aliases have been deprecated and full namespaces should be used in the future. A full list of aliases can be found from the concrete/config/app.php file.
Incorrect: fa
<?php
namespace Application\SomeStuff;
use Area;
use Block;
use Page;
// etc.
class MyClass
{
// ...
}
Correct:
<?php
namespace Application\SomeStuff;
use Concrete\Core\Area\Area;
use Concrete\Core\Block\Block;
use Concrete\Core\Page\Page;
// etc.
class MyClass
{
// ...
}
Facades
Generally it is suggested to define your object's dependencies in the constructor rather than using the faceades.
Incorrect:
<?php
namespace Application\SomeStuff;
use Concrete\Core\Support\Facade\Application;
class MyClass
{
public function doSomething()
{
$app = Application::getFacadeApplication();
$db = $app->make('database')->connection();
if ($db->tableExists('Areas')) {
$this->doSomethingElse();
}
}
// ...
}
Correct:
<?php
namespace Application\SomeStuff;
use Concrete\Core\Database\Connection\Connection;
class MyClass
{
protected $db;
public function __construct(Connection $db)
{
$this->db = $db;
}
public function doSomething()
{
if ($this->db->tableExists('Areas')) {
$this->doSomethingElse();
}
}
// ...
}
With this type code, you will need to initiate your class through the IoC container for it to resolve the dependencies automatically:
<?php
$my = $app->build('Application\SomeStuff\MyClass');
$my->doSomething();
Sometimes this might not be possible e.g. when modifying a class that already has existing constructor functionality. In those cases it is still OK to use facades.
Loader functions
Loader::db() - deprecated since 5.7
replacements:
$db = Database::connection();
$db = $app->make('database')->connection(); /* @var $db \Concrete\Core\Database\Connection\Connection */
Loader::helper() - deprecated since 5.7
replacements:
$pkgh = $app->make('/packages/' . $pkgHandle . '/helper/' . $service);
$h = $app->make('helper/' . $service);
examples:
$th = $app->make('helper/text');
$nh = $app->make('helper/navigation');
$ps = $app->make('helper/form/page_selector');
$al = $app->make('helper/concrete/asset_library');
$color = $app->make('helper/form/color');
$form = Loader::helper(‘form’) - deprecated since 5.7
replacement:
block/view.php: $form is already defined
Loader::packageElement() - deprecated since 5.7
replacement:
$ve = View::element($file, $args, $_pkgHandle);
Loader::element() - deprecated since 5.7
replacement:
$ve = View::element($file, $args, $_pkgHandle);
Loader::model() - deprecated since 5.7
*replacement: *none
Loader::library() - deprecated since 5.7
*replacement: *none
Loader::controller() - deprecated since 5.7
replacement:
in a page: Page::getPageController();
BlockType
BlockType::installBlockTypeFromPackage() - deprecated since 5.7
replacement:
$bt = BlockType::installBlockType($handle, $pkg);
Database
Database::get() - deprecated since 5.7
replacement:
$db = Database::connection();
$db = $app->make('database')->connection(); /* @var $db \Concrete\Core\Database\Connection\Connection */
$db->execute() - deprecated since 5.7
replacement(s):
$db->executeQuery($q, array($arguments));
($q instanceOf \Doctrine\DBAL\Statement): $q->execute($arguments);
$db->GetOne() - deprecated since 5.7
replacement:
$res = $db->fetchColumn($q, array($arguments))
$db->GetAll() - deprecated since 5.7
replacement:
$res = $db->fetchAll($q, array($arguments))
File
$f->isError() - deprecated since 5.7
returns false
replacement: none, (File::getByID() != null)
Controller
Controller $this->redirect()
replacement:
Redirect::to($url)->send()
PageController::isPost() - deprecated since 5.7
replacement:
$this->getRequest()->isPost()
PageController::post() - deprecated since 5.7
replacement:
$this->request->request->get()
PageController::get() - deprecated since 5.7 (for HTTP GET parameters)
replacement:
$this->request->query->get()
PageController::get() can still be used to fetch the variables that have been made available through PageController::set(). In case you are fetching HTTP request parameters, you should be using the above method insteead.
Permissions
FilePermissions::getGlobal() - deprecated since 5.7
replacement:
$fp = new Permissions(FileSet::getGlobal());
TaskPermission() - deprecated since 5.7
replacement:
$tp = new Permissions();
Request
Request::getInstance()
replacement:
$r = $app->make(\Concrete\Core\Http\Request::class);
UserInfo
UserInfo::getByID()
replacement:
$ui = $app->make(\Concrete\Core\User\UserInfoRepository::class)->getByID();
Marketplace Packages
If you are developing packages for the marketplace, please note that unless stated otherwise, the above guidance refers to the latest Concrete core version. If your marketplace package provides compatibility with previous core versions, you may need to use deprecated code in order to maintain backward compatibility with both the core API and supported PHP versions.
Full list from source
Unfortunately this page can lag behind the status of the current Concrete core. From the linux command line, you can get a list of lines by navigating to the /concrete/ directory and running:
grep --include=*.php -rnw ./ -e "@deprecated"