Web
Analytics
Skip to content
Concrete5 на русском языке

Создание пользовательских функции в директории Приложений

Проще всего добавлять пользовательские функции для сайта в concrete5 в директории application/src. Во-первых, мы добавим наш PostList класс (который расширяет  Concrete\Core\Page\PageList) в директорию:

application/src/Page/PostList.php

Затем, мы проверим, чтобы наш класс был размещен в правильном пространстве имен.

namespace Application\Page;

class PostList extends Concrete\Core\Page\PageList
{


}

Наконец, в файле application/bootstrap/autoload.php мы зарегистрируем Application\Page как указывающий на класс application/src/Page, используя пользовательский автозагрузчик PSR-4 autoloader

Следующие строки помещаются в application/bootstrap/autoload.php:

$classLoader = new \Symfony\Component\ClassLoader\Psr4ClassLoader();
$classLoader->addPrefix('Application\\Page', DIR_APPLICATION . '/' . DIRNAME_CLASSES . '/Page');
$classLoader->register();

Вот и всё! Теперь concrete5 знает, что любой класс, найденный в пространстве имен Application\Page будет загружаться из application/src/Page/. Так как это стандартное поведение PSR-4, вы теперь можете создавать иерархию классов в пространстве имен Application\Page , и они будут указывать прямо на файлы, найденные в папке  application/src/Page и ниже. (названия чувствительны к регистру)

Поддержка старых версий

Пользователи concrete5 до версии 8 могут слегка запутаться. В версии 5.7.5.10 и ранее, вы могли добавить этот файл просто указав пространство имен Application\Src\Page, и разместив его в этом же месте, не было необходимости в пользовательском автозагрузчике. Что это дает? 

Просто: Нам не нравилось видеть  \Src. Семантически это не верно, и бессмысленно, когда он смешивается с функциями, у которых нет src. Лучше добавить дополнительный код автозагрузчика для пользовательского поведения, чем иметь систему, у которой мало смысла и огромное количество несоответсвий. 

Тем не менее, если ваш сайт основывается на пользовательских функциях, как эта, и не хотите менять пространства имен всех своих классов (и добавлять пользовательский загрузчик) вы можете восстановить поддержку старых версий, добавив этот массив в файл application/config/app.php:

'enable_legacy_src_namespace' => true

это восстановить автозагружающиеся классы, найденные в application/src/ для пространства имен Application\Src.

Добавление пользовательских сущностей Doctrine ORM в Директорию Application

Код, который хотите добавить в  application/src является сущностью Doctrine ORM? Это пользовательский класс, указывающий на таблицу базы данных используя аннотации PHP. Еслиf это так, то вам даже не нужно создавать пользовательский автозагрузчик; он уже указывает и готов. Просто создайте сущность в application/src/Entity, и дайте ей пространство имен, начинающееся сApplication\Entity. Например:

src/application/src/Entity/User/RegistrationRecord.php

этот файл будет найден автоматически, если будет использовано правильное пространство имен и класс, который он использует:

namespace Application\Entity\User;
class RegistrationRecord
{

}

Важное замечание

Вы должны убедиться, что вы импортировали аннотации ORM пространства имен в эту сущность, для использования в этом автозагрузчике. Поэтому проверьте, чтобы класс сущности выглядел так:

namespace Application\Entity\User;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="UserRegistrationRecords")
 */
class RegistrationRecord
{

    /**
     * @ORM\Id @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

А не так:

namespace Application\Entity\User;

/**
 * @Entity
 * @Table(name="UserRegistrationRecords")
 */
class RegistrationRecord
{

    /**
     * @Id @ORM\Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

Если интересно почему? Прочитайте это..

Включение классов с помощью Composer в проект concrete5

Хотите использовать Composer чтобы загружать и устанавливать на сайт сторонние библиотеки? Скоро об этом появится информация.

Загрузка беседы