PHP Frameworks

dakata__92

Super Moderator
Как се предава конфигурацията в различните класове от конфигурационната папка в работни рамки като CodeIgniter, Zend, Symphony? Примерно AppKernel прави инстанция на Config класът и после се наследява или прави инстанция на AppKernel за да се вземат файловете ли? Друг варянт за който смятам, че ползват е абстрактен клас. Не съм много добре запознат затова Ви моля да ми обясните как големите рамки разпространяват по класовете си конфигурационните файлове? Дайте една блокова схема така простичко направена смисъл 1,2,3,4... за да се получи качествено.
 
Използват package manager-и както за конфигурацията, така и за останалите части от framework-а.
Обикновено Composer (https://getcomposer.org/).

Composer включва в себе си функции за Автозареждане и Инстанцииране на класове / пакети от класове.

Автозареждането и инстанциирането се извършват по точно определени стандарти PSR (http://www.php-fig.org/faq/).

Класовете / пакетите от класове също се пишат по определени стандарти и определен стил ( https://sourcemaking.com/), като се съблюдават горните стандарти за автозареждане и инстанцииране.

Пример Laravel Config:

Страницата с репото за Laravel: https://github.com/laravel/laravel
В репото ще намериш следния файл: composer.json.

Няма да влизам в подробности какво и как прави composer, просто ще ти покажа как зарежда Config.

В composer.json файла имаш:
[js] "require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*"
}[/js]

composer търси и намира следния пакет в собствената си директория от пакети: https://packagist.org/packages/laravel/framework

Отваряме https://github.com/laravel/framework и намираме composer.json отново. Отваряме файла и намираме следните:

[js]
...
"replace": {
...,
"illuminate/config": "self.version",
...
},
...
"autoload": {
...,
"psr-4": {
"Illuminate\\": "src/Illuminate/"
}
},
...
[/js]

Разбираме че по PSR4 (http://www.php-fig.org/psr/psr-4/) стандрта се зарежда namespace Illuminate, а класовете имплементиращи namespace-a се намират в src/Illuminate/

Отваряме https://github.com/laravel/framework/tree/5.1/src/Illuminate/Config и виждаме composer.json и Repository.php

Разгледай и почети за framework-а. Ще разбереш и как се използва този клас от App namespace-a.

Сигурно съм те оставил с куп въпроси от колкото с отговори, но това е хубавото на програмирането - винаги трябва да се учиш сам.
 
Да наистина ме остави с доста въпроси, но един ми се открои повече, който така не успях да схвана. Значи composer.json се конектва към сайта на работната ми рамка тоест създал съм сайт като например http://www.codeigniter.com/ след което компосер се конектва и към сайта ми от сървъра на хостинга на който потребителя иска да използва моят софтуер и сваля от моят на неговият конфигурационните файлове. Правилно ли съм разбрал?
 
Не.

Composer е просто инструмент за зареждане на имплементацията на това което правиш.

Къде ще си хостнеш имплементацията е друг въпрос.
 
eLite каза:
Не.

Composer е просто инструмент за зареждане на имплементацията на това което правиш.

Къде ще си хостнеш имплементацията е друг въпрос.
Ок. Сега друг въпрос. Мен ме интересува как във самите фреймове се разпространява конфигурацията примерно настройките bool true false за ерорите или секюрити защитите. Как се добавят от външен файл от конфигурационната папка във класовете и файловете?
 
Както каза @gamena007 - контейнер. За четене: http://knpuniversity.com/screencast/dependency-injection/container
 
Да не си помислите че оспорвам практиките на големите фреймуорци, обаче аз лично не виждам ползата от някакви композери и xml-и. Тези неща само правят по сложно приложението. За какво са като същата функционалност може да се направи и с един php клас?
 
teroristd каза:
Да не си помислите че оспорвам практиките на големите фреймуорци, обаче аз лично не виждам ползата от някакви композери и xml-и. Тези неща само правят по сложно приложението. За какво са като същата функционалност може да се направи и с един php клас?
Така и аз си мисля, но компосър е доооспа по-функционален от това поне според четенето което му одарих. В момента се чудя как да разпространявам по-правилно и автоматизирано.
 
teroristd каза:
Да не си помислите че оспорвам практиките на големите фреймуорци, обаче аз лично не виждам ползата от някакви композери и xml-и. Тези неща само правят по сложно приложението. За какво са като същата функционалност може да се направи и с един php клас?
Можеш естествено.

Зависи какви приложения пишеш.
Но ти гарантирам, че искаш или не искаш, ще се сблъскаш с него.

Честно казано и аз бях скептичен когато се сблъсках с него. Но сега в зависимост от приложенията, които пиша, често го използвам и ми е много удобен.
 
teroristd каза:
Да не си помислите че оспорвам практиките на големите фреймуорци, обаче аз лично не виждам ползата от някакви композери и xml-и. Тези неща само правят по сложно приложението. За какво са като същата функционалност може да се направи и с един php клас?

В един php клас, викаш? https://packagist.org/ :)
 
eLite каза:
teroristd каза:
Да не си помислите че оспорвам практиките на големите фреймуорци, обаче аз лично не виждам ползата от някакви композери и xml-и. Тези неща само правят по сложно приложението. За какво са като същата функционалност може да се направи и с един php клас?
Можеш естествено.

Зависи какви приложения пишеш.
Но ти гарантирам, че искаш или не искаш, ще се сблъскаш с него.

Честно казано и аз бях скептичен когато се сблъсках с него. Но сега в зависимост от приложенията, които пиша, често го използвам и ми е много удобен.

Естествено ако ползваш Laravel например, или някой друг фреймуорк, искаш не искаш трябва да го ползваш, защото ти е наложен. Без него не можеш да подкараш приложението. Но аз лично не виждам смисъл от цялата тази хамалогия :) . С какво е по удобен от един php клас?
 
teroristd, функционалностите на composer не се изчерпват само с autoloader-a. :roll: + не виждам нищо сложно и натоварващо в composer. По-удобен е с това, че не трябва да преоткриваш колелото.
 
djman каза:
teroristd, функционалностите на composer не се изчерпват само с autoloader-a. :roll: + не виждам нищо сложно и натоварващо в composer. По-удобен е с това, че не трябва да преоткриваш колелото.

Ако хората следваха твоята логика, то сега щеше да има само един език за програмиране. Има повече от един начин да се постигне нещо, било то като говориме за програмиране или за нещо друго. Понеже споменаваш колелото, ти какви гуми ще си сложиш на колата мишелин или от тия каменните :D ? Как да няма нищо натоварващо в композер. Трябва да учиш някакви команди за да го ползваш. Ако имаш желание няма лошо. Ама за какво трябва да минавам през това например

Код:
{
    "require": {
        "vendor/package": "1.3.2",
        "vendor/package2": "1.*",
        "vendor/package3": "^2.0.3"
    }
}

curl -sS https://getcomposer.org/installer | php

php composer.phar install

require 'vendor/autoload.php';

като може просто да е require 'vendor/autoload.php';
 
Ами то Е само require... Останалото е удобен начин за инсталиране на packages, + някоя и друга функционалност - всички от които не си задължен да ползваш. :wink: composer се тегли веднъж; а за json файл - добре подреден и лесен за четене - не знам какво имаш против.
 
Ама за какво трябва изобщо да инсталираш нещо? За какво трябва да е json файл? Всичко може да е php и пак ще е лесно за четене, и пак ще си викаш само каквото ти трябва.
 
djman каза:
Ами то Е само require... Останалото е удобен начин за инсталиране на packages, + някоя и друга функционалност - всички от които не си задължен да ползваш. :wink: composer се тегли веднъж; а за json файл - добре подреден и лесен за четене - не знам какво имаш против.
Да така си е но и аз клоня към мнението на терориста относно излишното усложнение. Не виждам голяма логика да свалям различни готови класове в системата си като контейнери и така нататък само защото топа е масова практика. По принцип е добре но и не е добре. Реално той ми налага определен стил на писане който аз трябва да предам на рамката което може да не ме удовлетвори. Ако гониш производителност и ниско натоварване на паметта то това е напълно излишно за малки проекти.
 
teroristd каза:
Е да де ама след като си инсталираш композера :D.

Инсталираш - изтеглиш един файл, който слагаш някъде и го ползваш за всички проекти. dafuq :D
 
dakata__92 каза:
Да така си е но и аз клоня към мнението на терориста относно излишното усложнение. Не виждам голяма логика да свалям различни готови класове в системата си като контейнери и така нататък само защото топа е масова практика. По принцип е добре но и не е добре. Реално той ми налага определен стил на писане който аз трябва да предам на рамката което може да не ме удовлетвори. Ако гониш производителност и ниско натоварване на паметта то това е напълно излишно за малки проекти.

Ами да, за какво са всякакви design pattern-и, те ми казват как да пиша - излишно усложняване. А най-добре е да се пише php и html на едно. В един файл. Никакво усложнение. Ай... думи нямам :D
 

Back
Горе