Micro-framework pentru PHP (wmvc)

Mi-am învins lenea şi am făcut un mic exemplu de utilizare al framework-ului meu :slight_smile: Ce am urmărit când am creat micro-framework-ul asta?

  1. Viteză, viteză, viteză. Să fie extrem de mic şi cât se poate de sprinten.
  2. Minimalism. Să nu fie plin de features pe care n-o să le folosesc niciodată.
  3. Fară magie. Framework-ul nu “ghiceşte” niciodată nimic, totul trebuie explicitat. Când te uiţi în fişierul cu rute vei vedea exact care URL la are clasă/metodă ajunge. routes.php e un soi de harta a site-ului.
  4. Nu trebuie folosit niciodata include sau require. Daca instantiezi o clasa, fisierul in care este clasa respectiva va fi incarcat automat prin autoload.
  5. Am insistat in mod deosebit sa am control total asupra imbricării şi randării view-urilor. De asemenea, am insistat să fie extrem de simplu şi intuitiv să pasezi variabile către views.
  6. Nu-mi plac SQL-builderele. Este imposibil să nu-ţi facă zile fripte mai devreme sau mai târziu. Aşa că am făcut un wrapper peste PDO care să-mi permita să fac manual interogările şi să pot folosi prepared-statements in mod intuitiv si fara sa ma gândesc prea mult la faptul că folosesc prepared-statements.
  7. Helpere pentru afisarea datelor in views, cat mai intuitive.
  8. Probabil am avut si alte goal-uri pe care nu mi le amintesc acum.

In mod sigur nu toate mi-au ieşit cum mi-aş fi dorit şi mai sunt de finisat multe lucruri, pe ici pe colo :slight_smile: Sugestiile şi criticile vor fi apreciate cum se cuvine.

Live: http://wmvc.icesoft.ro/


Framework-ul este folosit la site-urile astea:



https://wifimag.ro

La primele două pozele sunt cam “strâmbe”, dar aşa se întâmplă când ii oferi clientului posibilitatea de a schimba singur pozele :slight_smile:

10 Likes

Sa faci si un Readme in Guthub
Cum se instaleaza(vad ca ai acel autoload.php), cum se foloseste etc
:slight_smile:

Vezi ca este un config pentru nginx in directorul “etc”. Pur si simplu clonezi repo-ul in folderul unde e setat nginx-ul si cam asta e tot. Aveam pe undeva si un .htacces pentru Apache, dar nu l-am mai folosit demult :slight_smile:

Eu la-m pus in htdocs(folosesc xampp)

Daca ma iau dupa acel config pt Nginx si ce este in fisierul routes.php, in loc sa ajung in pagina de demo, ajung in not-foud.ctrl

Vad ca este o metoda index acolo


Am modificat eu mesajul de eroare

Pai nu e corect, URL-ul nu corespunde cu ruta. Stai sa caut un htaccess.

Salutare,

In primul rand, felicitari pentru initiativa si pentru efort! Super fain sa iti dedici timp pentru asa ceva.

In al doilea rand, am cateva sfaturi. Considera tu care sunt valoroase si care nu:

  1. Iti recomand sa organizezi fisierele in foldere separate, ca sa fie mai intuitiv la prima vedere.
  2. E foarte important ca orice cod open-source care il scrii, sa fie foarte bine documentat. Recomand DocBlocks. De asemenea, tot legat de documentatie, ai nevoie de ceva documentatie (macar un README.md mai consistent, dupa cum s-a precizat deja).
  3. Numele claselor trebuie sa fie mai bine alese, pentru ca clase de genul e.php, sunt destul de greu de inteles.
  4. Iti recomand foarte mult sa folosesti standardele PSR. Macar PSR-1, PSR-2, si pentru autoloader, PSR-4.
  5. Teste. Foarte importante. Mai ales in cazul tau.
  6. Daca vrei sa folosesti MVC, nu iti recomand neaparat. MVC-ul folosit in web, de cele mai multe ori este folosit gresit. Pe langa asta MVC-ul nu a fost creat pentru web. Mai bine foloseste-ti creativitatea ca sa creezi alt fel de arhitectura, ca si asa framework-uri “MVC” exista destule.
  7. Cauta sa te uiti la alte micro-framework-uri similare, cum ar fi Flight, Slim sau Lumen. Uite-te ce ai putea sa aduci tu in plus, si incearca sa te concentrezi pe asta.

Sper sa te fi ajutat, macar putin. :slight_smile:

Spor!

5 Likes

Damn, am şi uitat cat de ciufut e apache, nu vrea sa-mi ia in considerare .htaccess-ul nici mort :slight_smile: Cred ca ar trebui sa-ti mearga ceva asemanator cu chestia de mai jos, eu nu reusesc s-o pun in functiune, cred ca e vreo directiva care imi scapa pe undeva.

# Set base URL
SetEnv BASEURL /wmvc-example/

# Enable rewrite engine
RewriteEngine on

# Static resources (/res and /pub directories) - images, stylesheets, javascripts, fonts, etc
#RewriteCond %{REQUEST_URI} !/(?:res|pub)/(.+)\.(css|js|ico|gif|jpe?g|png|mp4|ogg|ttf|woff|svg)$ [NC]

# Route the rest of requests to the framework
RewriteRule . %{ENV:BASEURL}app/startup.php [L,PT]
1 Like

Eu l-am denumit “MVC” mai mult din inertie, e mai degraba “view-controller”, modelele le folosesc rareori, in multe cazuri pun SQL-urile direct in controller.

Apropo de e.php, l-am denumit asa din comoditate, “e” de la “echo” si e ca un fel de namespace pentru e::str, e::text, e::num samd. Daca ar fi mai bine documentat, probabil s-ar intelege fara probleme :slight_smile: Poate se gaseste un voluntar sa-l documenteze, engleza mea de balta e suficientă pentru citit si scris chestii scurte, dar insuficient pentru a scrie un text extins.

Apropo de alte framework-uri, nu prea am studiat altele, pur si simplu am facut unul cum am crezut ca ar fi cel mai simplu pentru mine.

Multumesc pentru aprecieri.

1 Like

probabil ai in apache2.conf allowoverride pus pe none la folderul parinte

Până la urmă mi-a ieşit cu improvizaţia asta:

  1. Am mutat toate fisirele si directoarele din /var/www/html/wmvc-example in /var/www/html (eu folosesc Fedora, asta e directorul implicit pentru docroot-ul lui apache).

  2. Am creat in /var/www/html un fisier numit index.php si am bagat in el asa:

<?php include "wmvc/startup.php";
  1. Am modificat .httaccess sa arate asa
# Set base URL
SetEnv BASEURL /

# Enable rewrite engine
RewriteEngine on

# Static resources (/res and /pub directories) - images, stylesheets, javascripts, fonts, etc
RewriteCond %{REQUEST_URI} !/(?:res|pub)/(.+)\.(css|js|ico|gif|jpe?g|png|mp4|ogg|ttf|woff|svg)$ [NC]
RewriteCond %{REQUEST_URI} !/jquery-3.3.1.min.js [NC]


# Route the rest of requests to the framework
RewriteRule . %{ENV:BASEURL}index.php [L,PT]

Presupun ca merge si daca proiectul nu este in rădăcină, dar să dea naiba dacă ştiu să fac asta cu Apache :slight_smile:

L-am pus eu in radacina si in log am acesta minunata eroare
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://localhost:81/wmvc-example-master/

:slight_smile:
Urmeaza sa incerc ce este m-ai sus !
Initial mi-a scapat ce a zis tekkie

apache2.conf allowoverride

dar am modificat in all

Vezi sa ai .htaccess cum am scris eu putin mai devreme. Dupa aia il accesezi direct asa: http://localhost

It works !!!

Merci :slight_smile:

Windows initial nu a vrut redenumesca fisierul .htaccess fara nicio extensie si a fost nevoie de vim

1 Like

Extensia este htaccess. Nu a vrut să redenumească un fișier fără nume :smiley:

Darrrr… dacă mai ai nevoie vreodată, este suficient să pui numele fișierului .htaccess. (pui punctul și după).

1 Like

sau sa folosesti linux :slight_smile:

1 Like

Sau VIM pt Windows ! :smiley:

@iamntz, merci pt pont :slight_smile:

Schimbăm workflow-ul unei întregi firme, ne obișnuim cu alte paradigme ale OS-ului și citim sute de pagini de manual când ceva nu merge doar pentru a putea face un fișier. Chiar nu văd nimic greșit aici. Nimic.

2 Likes

nici nu este :slight_smile:
schimbarea e buna uneori (nu a zis nimeni ca trebuie facuta peste noapte sau in timpul proiectului).

oricum, sry pt offtopic

1 Like
// integer
static function int($num)
{
	return intval($num);
}


// number (can be integer, float, etc)
static function num($num)
{
	return ($num + 0);
}

// conditionally print
static function cond($cond, $str)
{
	if($cond)
		return $str;
	return "";
}

care-ar fi rostul la metodele astea?

Citisem pe Wikipedia, ca initial acest pattern arhitectural a aparut prin anii 70, initial in limbajul Smalltalk

One of the seminal insights in the early development of graphical user interfaces, MVC became one of the first approaches to describe and implement software constructs in terms of their responsibilities.[9]

Trygve Reenskaug introduced MVC into Smalltalk-76 while visiting the Xerox Palo Alto Research Center (PARC)[10][11] in the 1970s. In the 1980s, Jim Althoff and others implemented a version of MVC for the Smalltalk-80 class library. Only later did a 1988 article in The Journal of Object Technology (JOT) express MVC as a general concept.

In aplicatiile desktop based, un alt pattern arhitectural destul de este mvvm.

1 Like