Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Пространства имён
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Всем привет.
Хочу разобраться с тем как правильнее писать неймспейсы, в psr-4 сказано что пространство должно начинаться с имени производителя.

Я пишу шаблонизатор для себя, но думаю его потом выложить в общий доступ, мало ли мож пригодится.

Сейчас у меня используются абсолютные пространства имён, то есть от корня сайта.
Например library/arh/Tpl; - файл library/arh/Tpl.php
А по стандарту нужно писать arh/Tpl;
Ну ладно, могу писать так, поправлю автозагрузчик, добавив "library" в инклюд.

Но как быть с остальными классами, которые по идее могут лежать где угодно?
Например: module/news/library/News.php
Какое у этого класса должно быть пространство имён?

Допустим этот модуль разработал Вася, ему писать:
vasya/module/news/news
или vasya/arh/module/news/news
или просто module/news/news но тогда не psr-4
или vasya/news/News и надеяться что у Васи не будет других проектов с именем news

А теперь начинаются костыли, потому что пространство не соответствует физическому пути к файлу, придётся писать какой то конфиг, в котором надо будет указывать что vasya/news/News это на самом деле module/news/library/News.php, что бы автозагрузчик подключил именно этот файл,
придумывать какие то механизмы рефлексии что бы не править постоянно днём и ночью эти настройки в ручном режиме.

Я правильно понимаю схему?


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
keinhoj  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 31
Пользователь №: 41480
На форуме: 1 год, 5 месяцев, 22 дня
Карма: 1




Цитата
Я правильно понимаю схему?

нет, папка vendor/library там все классы, а не по всей системе
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




Цитата (keinhoj @ 2.12.2015 - 12:28)
Цитата
Я правильно понимаю схему?

нет, папка vendor/library там все классы, а не по всей системе

Так не получится.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




keinhoj
Ну точнее получиться, но будет неудобно и не красиво и криво.
Да и как тогда Васе писать пространство, что бы сразу понять что этот модуль написан для системы aaa, а не для системы bbb vendor/vasya/aaa/module/news/News.php ?
А так же он по мимо модуля напишет библиотеку vendor/vasya/aaa/library/News.php
Получится тоже самое, только на 2-3 уровня больше.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 21 день
Карма: 111




Какие-то выдуманные проблемы ну реально

1 смотрим как это уже сделано и работает и никому не мешает

Например возьмем Симфони у них модуль называеться бандл и навзвание Bundle должно встречаться в пространстве имен то есть например

Acme\DemoBundle;
и там класс отвечающий за загрузку бандла
AcmeDemoBundle

лежать могут они все где угодно и как угодно хоть вендор

vendor\acme\demo-bundle\src\AcmeDemoBundle.php
хоть
src\Acme\DemoBundle
хоть
vendor\acme\demo-bundle\src\Acme\DemoBundle\AcmeDemoBundle.php

все решаеться и описано в psr-0 psr-4 + правила именования в системе

а откуда узнает где брать? А есть автозагрузчик который
1 знает где лежат неймспесы и куда смотреть в данном случае composer
а что он включен решаеться на уровне AppKernel там инициализируеться Bundle


так что тебе стоит тогда для своей cms сделать правила именования модулей и все
и доработать загрузку,

либо как пример cms с плагинами и тд
https://octobercms.com/docs/plugin/registration

все должно иметь свой интерфейс либо получаешь хаос который ты описываешь и пытаешься его решить =) нужен другой путь

и да какая разница для какой системы написан ааа или ббб? Ставить то будет тот который нужен, ты не должен за него решать куда он будет ставить) ты должен ему сказать что вот с такими правилами твой плагин запуститься, а по таким нет


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




bestxp
Цитата
Какие-то выдуманные проблемы ну реально

Ну они реально выдуманные =) потому что я еще не преступал к реализации.

Цитата
лежать могут они все где угодно и как угодно хоть вендор

Я потому и задался вопросом, что бы избежать жесткой привязки библиотек к моей архитектуре.

В общем всё зависит от фантазии и каких то определённых паттернов нет?)

Цитата
и да какая разница для какой системы написан ааа или ббб?

Я понимаю что было бы круто взять модуль например из DLE и включить его в друпале, но там не только от классов зависит, есть еще уйма ньансов.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса