CrudController

Pomocí toho již předem vytvořeného controlleru můžete velmi rychle a efektivně vytvořit vlastní administrační rozhraní pro jakoukoliv tabulku. Stačí jednoduše svůj controller zdědit od CrudControlleru. Samotný CrudController dědí od AppControlleru, takže nepřijdete o svoji předdefinovanou init metodu.

Povinně musíte nastavit dvě členské proměnné:

  • $table – databázová tabulky, nad kterou se vytvoří CRUD
  • $link – maska odkazu, pro daný CRUD controlelr
class PagesController extends CrudController
{

    protected $table = "pages";
    protected $link = "/admin/pages/<:action>";

}

Jak vidíte, do $link musíte uvést odkaz ve tvaru routy. Tedy na místo metody vložit proměnnou <:action>. V tuto chvíli už stačí se podívat na adresit /admin/pages/index a uvidíte tabulku vašich db záznamů, které můžete jednoduše upravovat a přidávat.

Výběr sloupců pro datagrid

Samozřejmě se může stát, že některé sloupce, které jsou zobrazeny na indexu v Datagridu nechcete zobrazovat. Toto chování jednoduše změníte pomocí proměnné $columns.

protected $columns = array('id', 'url', 'title', 'updated');

Výběr sloupců pro editaci

Stejně tak se může hodit možný výběr sloupců, které jsou přes administraci upravit.

protected $editColumns = array('url', 'title');

I kdyby jste do $editColumns zadali název sloupce s primárním klíčem, tak jej stejně nebudete moci upravit!

Pojmenování sloupců

Názvy sloupců jsou často velmi uživatelsky nepřívětivé a také většinou v angličtině. CrudController Vám nabízí možnost jim nastavit vlastní popisky.

protected $labels = array(
    'url' => 'Url',
    'title' => 'Název stránky',
    'submit' => 'Uložit' # tlačítko pro uložení má vždy název submit
);

Filtry pro ukládání

Často se stane, že chceme při ukládání hodnotu sloupce nastavovat automaticky. Pak pomocí $editColumns editace zrušíme a pomocí metody processData($data) ukládaná data upravíme.

protected function processData($data)
{
    $data['updated%r'] = 'NOW()';
    return $data;
}

Úprava formuláře

protected function getForm($table)
{
    # pridame resetovaci tlacitko
    $form = parent::getForm($table);
    $form->addReset();
    return $form;
}