Sveiki, manau daug kam bus aktualu sužinoti kas tas MVC ir kaip jis veikia, kadangi dar dauguma programuoja naudojant PLAIN PHP , tai siūlau perbėgti ant MVC principo ir palengvinti darbą visiems programuotojams, kurie dirbs su Jūsų kodu :)
darbą apžvelgsiu su CodeIgniter framework, tai paprasčiausias framework kiek žinau ir gana lengva jį išmokti, dėkoju Karoliui, kad mane išmokė :D
Pirmiausia, tai kas yra tas MVC?
Taip vadinasi principas, kuriuo paremta CodeIgniter sistema, kaip ir dauguma kitų profesionalių framework’ų. Esmė yra tokia, kad visas projekto veikimas išskiriamas į tris skiltis: Models – failai, kuriuose sudėta visa web-projekto logika ir darbas su duomenimis; Views – failai, kurie atsakingi už galutinio HTML teksto atvaizdavimą į naršyklę; Controllers – failai, kurie kreipiasi į Model, paima duomenis ir perduoda į View, kad atvaizduotų tekstą.
Kaip veikia MVC sistema?
● Models – failai, kuriuose sudėta visa web-projekto logika ir darbas su duomenimis; ● Views – failai, kurie atsakingi už galutinio HTML teksto atvaizdavimą į naršyklę; ● Controllers – failai, kurie kreipiasi į Model, paima duomenis ir perduoda į View, kad atvaizduotų tekstą.
Kaip išlaikyti struktūrą ir kodėl reikia ją išlaikyti?
Views: 1. Nedarykite jokių veiksmų su duomenų baze 2. Nenaudokite sudėtingų konstrukcijų – tik IF sąlygos sakinius ir ciklus
Controllers: 1. Neturi būti HTML kodo 2. Neturi būti jokių tiesioginių veiksmų su duomenų baze.
Models: 1. Neturi būti HTML kodo
Bet čia yra ir gerų savybių:
Views: 1. Galima skaidyti HTML kodą į kelis skirtingus Views 2. Galima naudoti IF sąlygos sakinius ir ciklus
Controllers: 1. Tai yra tarpinė grandis tarp DB duomenų ir jų išvedimo į View 2. Čia reikia pritaikyti logiką visiems duomenims ir atlikti veiksmus su jais 3. Iš čia iškviečiami Models metodai duomenų ištraukimui/išsaugojimui 4. Čia apdorojamos klaidos ir klaidų pranešimai
Models: 1. Apdoroja gautus duomenis iš DB, bet sudėtingesnius veiksmus geriau palikti Controlleriui 2. “Pagauna” klaidas ir persiunčia jas į Controller 3. Duomenų įvedimo patikrinimas vyksta būtent čia
Mažytis pavyzdys, tai paprastas skaičiavimas, kuris parodys rezultatą:
pirmiausia tai susikuriam Models (šio framework viduje jį rasit: application/models/) failą ir pavadinam jį skaiciavimai_model.php
class Skaiciavimai_model extends CI_Model {
function __construct() {
parent::__construct();
}
function Veiksmas($a, $b) {
$data['veiksmas'] = $a + $b;
$data['masyvas'] = array(
"true" => "Atsakymas daugiau nei 10",
"false" => "Atsakymas mažiau nei 10");
if($data['veiksmas'] >= 10) $result['atsakymas'] = $data['masyvas']['true']; else $result['atsakymas'] = $data['masyvas']['false'];
return $result;
}
}
Kadangi jau turime modelį, kuris atlieka loginę užduotį, laikas susikurti controller'į, kuris tai apdoros ir perduos informaciją į views atvaizdavimui. Susikuriam skaiciavimai.php kataloge controllers (application/controllers):
class Skaiciavimai extends CI_Controller {
public function index() {
$this->load->model('Skaiciavimai_model');
$array['rezultatas'] = $this->Skaiciavimai_model->Veiksmas(5, 4);
$this->load->view('main_view', $array);
}
}
Na ir paskutinė dalis tai views, čia turim išsivesti mūsų fją. Pas mane pagrindinis views failas yra main_view.php, kaip matėt į jį ir perdaviau controllerio užklausą.
šiuo atveju mums atspausdins: Atsakymas mažiau nei 10.
Tai tik mažytė dalis viso framework, bet esmę galima suprast, jeigu kas nežinot kaip susikurti views kataloge failą, kad einant jūsų adresu jį nuskaitytų kaip pagrindinį išvedimo failą, tai eikite į config/routes.php , susiraskit tokią eilutę ir ją pakeiskite:
$route['default_controller'] = "welcome"; // tai dažniausiai būna default nustatyta
$route['default_controller'] = "skaiciavimai"; // į tai reikia pasikeisti ir nepamirškit, kad jūsų controlleris turi vadintis "skaiciavimai.php"
čia kaip ir viskas, esmę galima suprasti iš šių pavyzdžių. Rėmiausi medžiagą, kurią sudarė Povilas Širvinskas, pavyzdžiai mano, tad jei pamatėt klaidą, pasakykit :) galit ir papildyti jei kas ne taip, arba klauskit, pabandysiu parašyti kažką :D dar vėliau tikriausiai pridėsiu pvz kaip dirbti su duomenų baze. Atsisiųsti šį framework galite čia: http://ellislab.com/codeigniter
Prisegsiu knygą, pirktą iš šio forumo nario "programmer007" jei neklystu, nes ne aš pirkau ją, bet ten abstu informacijos, kaip susikurti svetainę naudojant CI framework, tikiuosi nesupyks labai :D
codeigniter-knyga.zip
Ačiū už komentarus
P.s: kas nežino, yra toks tinklapis 3dev.lt tai ten buvo kažkada visa reikiama info apie MVC, bet kažkodėl užsidarė, o youtube įrašai dingo. Žinau, kad įrašų savininkas buvo šio forumo narys, tad jei yra galimybė ir TU dabar skaitai šį postą, atsiųsk man tuos video, aš juos vėl sukelsiu į youtube ir tai tikrai bus geros pamokos pradedantiesiems ir ne tik
Jus cia zmones is tuscio i kiaura... Kaip sake vienoje JS prezentacijoje: Viena is dabartiniu programuotoju problemu yra tai, kad jie pradeda optimizuoti koda dar jo net neprarasius. Refaktoringa reikia taikyti tik parasius koda, o ne pries. O kas liecia greituma, tai OOP yra tik gyvenimo stilius. Nera tokio dalyko, kurio negalima butu padaryti tik proceduriskai, ar tik su OOP. Ir be to b OOP dar visokiu yra, pvz AOP. Tad kaip jau minejau - is tuscio i kiaura.
Randa visi, 99% tai http://stackoverflow.com. Del skaiciaus, tai tau reikia ne is_int, o is_numeric, nes php kalboje 99% int yra stringai ir tik 1 procentas daro return (int).... O del tavo googlinimo - tu pirmai apsispresk ar tau reikia masyvo ar stringo.
Aplamai, as nieko pries mokimasi, bet 99% cia esanciu klausia kaip padaryta ta ir ta, o sekancioje temoje teikia programavimo paslaugas su 5 metu patirtimi.
Jei dar nepagavote - var_dump skirtas aplamai kintamojo reiksmes isvedimui ir tiek, nepriklausomai nuo jo tipo. O print_r skirtas tesiog masyvo isvedimui. Taciau jeigu masyvas tures koki bool ar null kaip auksciau - nieko jus nepamatisete ir prikursite dar 100 temu. Tai yra aplamai skirtingos funkcijos su skirtinga paskirtimi, tesiog sio momentu ju tikslas sutapo.
zinau,kad esu teisus - man uz tai piniga moka.
ir jo, kas del isvedimo - viskas veikia ko puikiausiai
Randa visi, 99% tai http://stackoverflow.com. Del skaiciaus, tai tau reikia ne is_int, o is_numeric, nes php kalboje 99% int yra stringai ir tik 1 procentas daro return (int).... O del tavo googlinimo - tu pirmai apsispresk ar tau reikia masyvo ar stringo.
Aplamai, as nieko pries mokimasi, bet 99% cia esanciu klausia kaip padaryta ta ir ta, o sekancioje temoje teikia programavimo paslaugas su 5 metu patirtimi.