Pereiti prie turinio

CakePHP naujoko klausimas


Rekomenduojami pranešimai

Šiek tiek dairausi po CakePHP ir atlikus paprastą užduotį susidūriau su kvaila problema:

 

$this->set('prekes', $this->Prekes->find('all'));

 

Čia aš į View perduodu "$prekes" (aš taip manau) duomenų bazės lentelės "Prekes" turinį masyve, bet man rašo kad grąžina, kad tai "non-object".

 

Lyg ir paprasta viskas, laikiausi naming convention sukūriau duomenų lentelę "prekes" ten įdėjau kelis įrašus, tada sukūriau modelį "Prekes.php" kuris pagal mane turi iškart kreiptis į tokio pat pavadinimo lentelę duomenų bazėje, tada controller'į PrekesController ir jame jau aukščiau minėta $this-set()...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ką galima padaryti:

 

  • Pasitikrinti ar Cake'e yra aprašytas prisijungimas prie duomenų bazės;

  • <?php
    App::uses('AppModel', 'Model');
    /**
    * Guestbook Model
    *
    */
    class Preke extends AppModel {
    
    /**
    * Use table
    *
    * @var mixed False or table name
    */
    public $useTable = 'preke'; // Pabandyk sita prideti
    
    }
    
    ?>
    


  • Pateikti dėtalų error report ir source

Redagavo Dummas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šiaip pateikti kaip ir nėr ką va visas source:

 

Controller PrekesController.php

<?php

class PrekesController extends AppController
{
   public $helpers = array ('html','form');

   public function index()
   {
       $this->set('prekes', $this->Prekes->find('all'));
   }
}

 

Model Prekes.php

<?php

class Prekes extends AppModel
{

}

 

View index.ctp

Hello

Nuoroda į pranešimą
Dalintis kituose puslapiuose

<?php
class PrekesController extends AppController {
   public $uses = 'Prekes';
   public $helpers = array ('html','form');

   public function index() {
       $this->set('prekes', $this->Prekes->find('all'));
   }
}

http://book.cakephp....ntroller::$uses

 

Norint be uses išsisukti reikėjo susikurti modelį ,,Preke" (nekenčiu lietuviškų pavadinimų šitoje vietoje) ir viskas būtų buvę gerai. :)

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

<?php
class PrekesController extends AppController {
   public $uses = 'Prekes';
   public $helpers = array ('html','form');

   public function index() {
       $this->set('prekes', $this->Prekes->find('all'));
   }
}

http://book.cakephp....ntroller::$uses

 

Norint be uses išsisukti reikėjo susikurti modelį ,,Preke" (nekenčiu lietuviškų pavadinimų šitoje vietoje) ir viskas būtų buvę gerai. :)

Na taip tas tiesa, dabar selectina, bet kažkodėl pagalvojau pagal dokumentaciją, kad jei DB tablas tokio pat pavadinimo kaip ir modelis turi automatiškai suveikti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na taip tas tiesa, dabar selectina, bet kažkodėl pagalvojau pagal dokumentaciją, kad jei DB tablas tokio pat pavadinimo kaip ir modelis turi automatiškai suveikti.

Paskaityk mano pranešimą dar kartą - jei modelis būtų buvęs "Preke", o ne "Prekes" tai viskas automatiškai ir suveiktu (PrekesController automatiškai krautų "Preke" modelį). ;)

 

Šaunu matyti, kad kažkas naudoja CakePHP, labai geras ir paprastas karkasas.

 

Tai, kad CodeIgniter techniškai miręs karkasas seniausiai tai daugiau nieko ir nelieka apart Yii (kuris man nelabai prie širdies), o dideliems projektams naudoju Symfony.

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Paskaityk mano pranešimą dar kartą - jei modelis būtų buvęs "Preke", o ne "Prekes" tai viskas automatiškai ir suveiktu (PrekesController automatiškai krautų "Preke" modelį). ;)

Tai čia dėl to dėl daugiskaitos/vienaskaitos ar kaip nepagavau?

 

Tai jei aš sukuriu kontrolerį TestsController krauna Test modelį, o tas savo ruoštu test table?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai čia dėl to dėl daugiskaitos/vienaskaitos ar kaip nepagavau?

 

Tai jei aš sukuriu kontrolerį TestsController krauna Test modelį, o tas savo ruoštu test table?

Taip, tu visiškai teisus dėl "TestsController -> Test modelis, o pavydžiui ArticlesController -> Article modelis". Kokia lentelę krauti modeliui tavo pasirinkimas - tu gali su $name kintamuoju nurodyt lentelės vardą jei jis skiriasi nuo modelio vardo:

 

class Test extends AppModel {
  public $name = 'Tests';
}

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neišmesk Zend'o iš vaizdo, jis dar daug kur naudojamas.

Zend'o? Aš nieko blogo apie jį net neužsiminiau. Mano pranešimas buvo apie daug lengvesnius karkasus, o Zend'o aš nepavadinčiau labai "draugišku" naujokams kurie pirmą kartą dirba su karkasu :)

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, tu visiškai teisus dėl "TestsController -> Test modelis, o pavydžiui ArticlesController -> Article modelis". Kokia lentelę krauti modeliui tavo pasirinkimas - tu gali su $name kintamuoju nurodyt lentelės vardą jei jis skiriasi nuo modelio vardo:

 

class Test extends AppModel {
  public $name = 'Tests';
}

Truputį supainiojai. TestsController -> Test modelis -> tests lentelė (automatiškai), o ne test lentelė automatiškai :D ir jo, nenaudokit lietuviškų pavadinimų. Šiuo atveju tinka galbūt - tiesiog s prideda ir gaunasi tas žodis, bet yra ir kitokių taisyklių, pvz. būtų kokia Kategorija, tai ir nesusimapintų automatiškai :)

Redagavo vitalikaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Butu idomu isgirst argumentuota nuomone, kodel CodeIgniter yra mires :)

 

Galiu labai paprastai argumentuoti savo nuomonę:

 

a) automatiškai nėra užkraunamas to kontrolieriaus modelis (reikia $this->load->model, tai automatiškai daro cakePHP, Symfony, ... karkasai). Šią problemą galima išspręsti su CI pluginais.

 

b)

$db['default']['dbdriver'] = 'mysql';

Pagal nutylėjimą naudojamas senas CI rašytas mysql driveris, kuris naudoja mysql_() funkcijas. Tiesa, egzistuoja ir PDO driveris, bet jis neefektyviai parašytas (nenaudojami nei prepared statementai, nei kitos PDO galimybės), todėl dokumentacijoje apie šią galimybę (kažkodėl!) neužsiminta.

 

c) Daugelis kodo morališkai pasenęs. Šitas pranešimas tai iliustruoja. :)

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galiu labai paprastai argumentuoti savo nuomonę:

 

b)

$db['default']['dbdriver'] = 'mysql';

Pagal nutylėjimą naudojamas senas CI rašytas mysql driveris, kuris naudoja mysql_() funkcijas. Tiesa, egzistuoja ir PDO driveris, bet jis neefektyviai parašytas (nenaudojami nei prepared statementai, nei kitos PDO galimybės), todėl dokumentacijoje apie šią galimybę (kažkodėl!) neužsiminta.

 

c) Daugelis kodo morališkai pasenęs. Šitas pranešimas tai iliustruoja. :)

Nu va, pasirodo forume yra ptoringu zmoniu!!! Malonu gyrdeti.

Redagavo apieviska
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ištrynė postą kur pasiųliau protingiausiam pasaulio programuotojui susikurti atskirą forumą kur nebus durnių, o kad jau nusivažiavo ne į temą visi postai tai whatever :D Reikia dabar ką nors parašyti kad nors kiek į temą būtu nes vėl ištrins:

 

Dėl CI $db['default']['dbdriver'] = 'mysql';

 

Naudojamas pagal nutylėjima toks, bet dar yra ne tik PDO kuris tu sakai kad ne kažką veikia, bet mysqli ar šitas irgi CI neefektyviai veikia?

 

Dėl pirmo punkto nežinau kodėl tai yra problema, aš pvz pažintį su frameworkais pradėjau nuo CI ir nepatogumo tame nekilo. Gal taip yra todėl, kad nepradėjau nuo pvz. cakephp kur automatiškai kraunasi modeliai, nežinau man čia ne argumentai, geriau jau būtum pasakęs kad neatsinaujina kartu su PHP versijomis ir neutilizuoja visų naujų galimybių.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ištrynė postą kur pasiųliau protingiausiam pasaulio programuotojui susikurti atskirą forumą kur nebus durnių, o kad jau nusivažiavo ne į temą visi postai tai whatever :D Reikia dabar ką nors parašyti kad nors kiek į temą būtu nes vėl ištrins:

 

Dėl CI $db['default']['dbdriver'] = 'mysql';

 

Naudojamas pagal nutylėjima toks, bet dar yra ne tik PDO kuris tu sakai kad ne kažką veikia, bet mysqli ar šitas irgi CI neefektyviai veikia?

 

Dėl pirmo punkto nežinau kodėl tai yra problema, aš pvz pažintį su frameworkais pradėjau nuo CI ir nepatogumo tame nekilo. Gal taip yra todėl, kad nepradėjau nuo pvz. cakephp kur automatiškai kraunasi modeliai, nežinau man čia ne argumentai, geriau jau būtum pasakęs kad neatsinaujina kartu su PHP versijomis ir neutilizuoja visų naujų galimybių.

Na čia jūs nebent darot ne į tema diskusija, manęs paklausė - aš atsakiau. Viskas. Kur problemos? Dėl CI paskaitykit mano pranešimą dar kartą - sakiau kad CI techniškai pasenęs. Tai ir reiškia, kad neatsinaujina kartu su PHP ir skirtas PHP4. Darot iš nieko diskusija. Laikas tema manau rakinti...

 

O dėl tavo supratimo - padirbėsi su visais karkasais, įgausi patirties - tada ir suprasi, kad tai buvo argumentai. Deja, tikrai ne visus savo turimus argumentus surašiau - čia buvo tik keletas, bet nenorėdamas dar toliau nukrypti nuo šios temos apsiribojau trim. Jei tiek nori sužinoti visus mano argumentus - geriau rašyk PM.

Redagavo dragelis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na čia jūs nebent darot ne į tema diskusija, manęs paklausė - aš atsakiau. Viskas. Kur problemos? Dėl CI paskaitykit mano pranešimą dar kartą - sakiau kad CI techniškai pasenęs. Tai ir reiškia, kad neatsinaujina kartu su PHP ir skirtas PHP4. Darot iš nieko diskusija. Laikas tema manau rakinti....

Manau ant PHP 4 dabartinė naujausia versija išvis neveiktu nes jau nuo CI v2 buvo pradėtas šalinti PHP 4 kodas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...