Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: lucid-php

Sivun loppuun

qeijo [23.01.2012 12:21:42]

#

lucid-php

Kevyt mvc php framework on nyt pari kuukautta ollut työn alla.

Huomasin tekeväni aika paljon toistoa aina uuden projektin tullessa, päädyin tekemään sovelluskehyksen joka soveltuu hyvin pieniin sekä vähän suurempiin projekteihin.

Lucid-php pohjautuu omiin kokemuksiin/tarpeisiin ja aikaisempiin töihin. Toki noita on netti pullollaan, mutta olen itse kaivannut suoraviivaisemman, kevyemmän sekä helposti laajennettavan frameworkin. Lucid-php:n tarkotus ei ole tarjota kaikkea maan ja taivaan väliltä, vaan lähinnä toimivan mvc projektialustan. Lucid-php on toki vielä kesken (myös kotisivut), mutta perus versio on ladattavissa:

http://lucid-php.net

Työn alla mm:
- Autentikointi mokkula

Rakentavaa kritiikkiä otan mielellään vastaan, turhanpäivästä viisastelua en.

EDIT:
Mod_rewrite on vielä toistaiseksi pakollinen.

timoh [24.01.2012 11:51:04]

#

PHP 5.3+ kun on vaatimuksena, niin kannattaa ottaa käyttöön nimiavaruudet ja samalla hoitaa class loading PSR-0 standardin mukaan:
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

Tuo selkeyttää ja helpottaa kummasti.

qeijo [24.01.2012 20:53:18]

#

Esim, mallit saan nyt suoraan autoload:illa includattua jos ovat vain oikein nimettyjä.

Eli luokan nimi: 'luokka'
Tiedosto vastaavasti: 'luokka.php'

Silloin ei tarvitse käyttää viittauksia kuten model_luokka jne. Onko nimiavaruuksien käytöstä jotain erityistä hyötyä? Olen kyllä yrittänyt soveltaa niitä php:ssä(kin), mutta ovat mielestäni olleet turhia.

Edit: Toki esim. Zend:in kokoisessa kehyksessä ajavat varmasti asiansa.

timoh [24.01.2012 23:18:29]

#

Nimiavaruuksilla vältät nimipäällekkäisyysongelmat (oman koodisi kanssa, muiden koodin kanssa ja itse PHP:n kanssa) ja saat koodista luettavampaa.

Tilanne voi monimutkaistua äkisti jos otat projektiisi mukaan ulkopuolisia komponetteja tai projektisi itsessään kasvaa. Mutta nimiavaruuksien kanssa homma pysyy nätisti kasassa.

Nykyään nimiavaruudet yhdistettynä tuolla PSR-0 standardilla pitää homman hyvin kasassa, ja erillisiä komponentteja on helppo käyttää itsenäisesti siellä missä niitä tarvitaan (tämä ei toki tietysti pelkästään tuolla PSR-0 standardilla ja nimiavaruuksilla hoidu). Mutta kuitenkin projektin rakenne ohjautuu oikeille raiteille niin että yhteensopivuus on paremmassa kunnossa.

Tuolla on lisää mietteitä nimiavaruuksista:
http://mwop.net/blog/254-Why-PHP-Namespaces-Matter

qeijo [27.01.2012 18:56:44]

#

Moro,

function __autoload($class) {

    $class = ltrim($class, '\\');

    /** controller **/
    if(is_file(CONTROLLER_PATH . DS . $class . ".php")) {
        return include(CONTROLLER_PATH . DS . $class . ".php");
    }

    /** namesapce **/
    $includeFile = str_replace("\\", "/", $class) . ".php";

    /** application **/
    if(is_file(APPLICATION_PATH . DS . str_replace("_", "/", $includeFile))) {
        include(APPLICATION_PATH . DS . str_replace("_", "/", $includeFile));
    }

    /** core **/
    elseif(is_file(LIBRARY_PATH . DS . str_replace("_", "/", $includeFile))) {
        include(LIBRARY_PATH . DS . str_replace("_", "/",$includeFile));
    }

    else {
        die("Could not autoload: " . $class . ", include file manually.");
    }
}

Eli nyt koko 'lucid' kirjaston luokat on nimetty polkujen "mukaisesti", esim.

<?php

class lucid_view { //etc..

Joten ne ladataan automaattisesti: new lucid_view();
Tiedosto löytyy siten hakemistosta /lucid/view.php

Lisäksi autoload mahdollistaa nimiavaruuksien käytön, esim kirjaus malli:

Tiedosto: /application/models/verkkomaksut/kirjaus.php

<?php

namespace application\models\verkkomaksut;

class kirjaus { //etc..

Ja lataus onnistuu:

<?php

use application\models\verkkomaksut as svm;

class indexController extends lucid_controller {


    public function init() {
         $this->setTemplate("onecolumn");
         $this->template->title = "...";
    }


    public function esimerkkiAction() {
         $kirjaus = new svm\kirjaus();
         ....
    }

...

Mielestäni tämä on hyvä ratkaisu, toki lucid kirjasto ei ole omassa avaruudessa.

ps. en saannut backslashia jostain syystä näkymään täällä.. (Mod. korjasi... Ihmeen bugeja PHP:n omassa väritysfunktiossa!)

qeijo [21.10.2012 13:08:10]

#

Hei, syyslomalla innoistuin hieman viemään lucid-php projektia eteenpäin, käykää ihmeessä lataamassa ja testatkaa.

Pyrin lisämään tänne pian linkin esimerkkisovellukseen, esim. lucidilla tehtyyn yksinkertaiseen 'blogiin', sen avulla voi ehkä saada paremman kuvan lucidin toimivuudesta.

Kritiikkiä ja kysymyksiä odotellessa, => http://lucid-php.net

qeijo [22.10.2012 12:29:49]

#

lucid-simple-blog:

Esimerkki on askeettinen ja osin puutteellinen, mutta siinä käy kuitenkin ilmi ohjureiden, mallien ja näkymien eri tehtävät ja toiminnot perustasolla.

Normi 'jakelusta' poikkeavat tiedostot:

- /project/application/controllers/blogController.php
- /project/application/models/blog.php
- /project/application/views/views/blog/*.html

Lisäksi project.conf - tiedostossa on määritelty oletusohjuriksi blogController

1. Apache mod_rewrite käyttöön

2. /project/public - hakemisto tulisi olla web-juuri

3. /project/log - hakemistoon/tiedostoihin kirjoitusoikedet

4. Tietokanta-asetukset määriteltävä project.conf tiedostoon

5. Tietokannan luontilause: database.sql

EDIT: Linkki poistettu

The Alchemist [22.10.2012 13:09:27]

#

Suosittelisin kuitenkin opettelemaan PSR-standardien mukaiset koodauskäytännöt ja ottamaan ne myös koko Lucid-projektiin käyttöön. Nykyisellään kaikki Lucid-luokat on varustettu täysin redundantilla etuliitteellä "lucid_", mikä tekee koodista sotkuista. Kyseisen etuliitteen kuuluisi olla oma nimiavaruutensa.

Toinen ongelma globaalin nimiavaruuden "saastuttamisessa" on se, ettei Lucidia voi integroida mihinkään muuhun olemassaolevaan järjestelmään. Tästä kielii toisaalta jo sekin, että autoloader heittää virhettä, mikäli se ei itse löydä mitään luokkaa. Tämä on väärin, koska autoloadereita voi olla monta, eikä mitään luokkaa saisi osatakaan ladata kuin täsmälleen yksi lataaja.

qeijo [22.10.2012 13:21:26]

#

The Alchemist kirjoitti:

..kaikki Lucid-luokat on varustettu täysin redundantilla etuliitteellä "lucid_"..

'lucid_' etuliite on tässä tapauksessa polku luokkaan, eli se kertoo mistä kyseinen luokka löytyy, esim:

lucid_controller = /lucid/controller.php

Mahdollistaa lucid kirjaston kasvattamista, esim:

lucid_validator_form = /lucid/validator/form.php

...

Toisaalta en näe enään mitään syytä miksi en vaihtaisi myös lucid kirjaston lataus samanlaiseksi kuin esimerkiksi malleilla on nyt:

//Tiedosto:    application/modles/blog.php
//Nimiavaruus: application\models
//Luokka:      blog

$blog = new application\models\blog();

//Autoloadaa: /application/models/blog.php

The Alchemist [22.10.2012 13:51:40]

#

Tuo esimerkki noudattaa jo muuten PSR:ää paitsi että luokkien pitäisi olla CamelCasella.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta