Marek Bednarczuk Freelancer
Temat: Modyfikacja Kohana 3.8.x
Cześć,w ramach pracy z Kohana podjąłem się wrzucenia na GitHub mojej modyfikacji frameworka. Efekty można obserwować tutaj https://github.com/rasgan/Kohana-3.0.x-mod-by-Rasgan.
Byłbym bardzo wdzięczny za wszelkie sugestie i porady.
Krzysztof Kozłowski na web na shyje
Temat: Modyfikacja Kohana 3.8.x
Czy gdzieś można poczytać o poczynionych zmianach?
Marek Bednarczuk Freelancer
Temat: Modyfikacja Kohana 3.8.x
Plik changelog.txt na githubie. Prace wciąż trwają. Mam nadzieję, że z waszą pomocą uda mi się stworzyć jakąś solidną podstawkę do budowy serwisów - coś ala sandbox symfony. Kopiujesz, konfigurujesz i maszTemat: Modyfikacja Kohana 3.8.x
A co planujesz dokładnie jeszcze tam pozmieniać, ulepszyć?
Marek Bednarczuk Freelancer
Temat: Modyfikacja Kohana 3.8.x
Może nie tyle ulepszyć co pozmieniać. Jutro wrzucę przeróbkę, że będzie jeden katalog z modułami, jeden z systemem a osobne katalogi application i public_html dla każdego projektu.Następnie chciałbym napisać jakiś w miarę mądry website_controller dziedziczący po template_controller. Póxniej może jakiś helper do wyświetlania menu. A co dalej? Sam nie wiem jak się rozwinie.
Michał
Płonka
Właściciel
Notifero,
programista PHP
Temat: Modyfikacja Kohana 3.8.x
Może ja się wypowiem i nieco Ci podpowiem, bo w pracy mamy bardzo mocno przerobioną Kohanę ale we wersji 2.3.4. Krótka lista tego, co się zmieniło/doszło:- własny moduł uwierzytelnienia,
- własny moduł kontroli dostępu (grupy użytkowników, uprawnienia przyznawane grupom czy pojedynczym użytkownikom - w sumie 5 poziomów nadawania uprawnień, nadawanie dostępu dla akcji oraz pól w formularzach (uwzględniane również w UPDATE)),
- klasa PageHead czyli budowanie nagłówka strony (dołączanie JS, CSS, nadawanie tytułu strony, znaczników meta),
- moduł "struktury" czyli każda podstrona ma swój identyfikator (zintegrowane m.in. z modułem ACL oraz z PageHead),
- zapis wykonywanych zapytań do bazy danych (czyli mamy możliwość zdiagnozowania kto co usunął lub co zmienił),
- kontroler dla żądań AJAX oraz zadań CRON (z metodą execute() do pojedynczego uruchomienia lub run() dla uruchomienia ciągłego oraz z zabezpieczeniem przed ponownym uruchomieniem jeśli zadanie aktualnie działa),
- moduł multi_app czyli odpalanie kilku aplikacji na tej samej Kohanie (kontrolery i widoki w podkatalogach odpowiadających nazwie aplikacji) + pełna (!!!) kaskadowość m.in. dla plików konfiguracyjnych (czyli dodanie na samym szczycie wczytywania konfigu dla danej aplikacji (nie tego z application)),
- klasa do tworzenia drzewek z dowolnych danych o określonej strukturze,
- klasa do tworzenia menu,
- moduł grida (do wykorzystania z w adminie oraz prostsza wersja tworząca po prostu tabelkę),
- własny moduł tworzenia formularzy,
- moduł "generatora" admina (wykorzystujący moduł grida oraz formularzy) z możliwością ustawiania/nadpisywania wszystkiego (nie to co ten w Symfony...). Przykład całej akcji listy:
<?php
/**
* Klasa akcji listy zasobów ACL.
*
* @author Michał "phpion" Płonka
*
*/
class Generator_Action_Acl_resource_List extends Generator_Action_List {
/**
* (non-PHPdoc)
* @see protected/modules/generator/libraries/Generator/Action/Generator_Action_List::configure_grid()
*/
protected function configure_grid() { $this->grid->add_column(new Grid_Column('id', 'ID'));
$this->grid->add_column(new Grid_Column('name', $this->i18n('fields.name')));
$this->grid->add_column(new Grid_Column('permission', $this->i18n('fields.permission')));
$this->grid->get_column_by_id('name')->set_is_link_to_edit(TRUE);
}
/**
* (non-PHPdoc)
* @see protected/modules/generator/libraries/Generator/Action/Generator_Action_List::configure_filters_form()
*/
protected function configure_filters_form() {
$fieldset = new Formject_Element_Fieldset();
$fieldset->set_controllers(new Generator_Form_Controllers_Filters());
$this->filters_form->add_element($fieldset);
$field = new Formject_Element_Field_Single_Text('filter[id]');
$field->set_label(new Formject_Element_Label('ID'));
$fieldset->add_element($field);
$field = new Formject_Element_Field_Single_Text('filter[name]');
$field->set_label(new Formject_Element_Label($this->i18n('fields.name')));
$fieldset->add_element($field);
$field = new Generator_Form_Field_Filter_Boolean('filter[permission]');
$field->set_label(new Formject_Element_Label($this->i18n('fields.permission')));
$fieldset->add_element($field);
}
}
oraz całej akcji formularza edycji:
<?php
/**
* Klasa akcji formularza zasobu ACL.
*
* @author Michał "phpion" Płonka
*
*/
class Generator_Action_Acl_resource_Form extends Generator_Action_Form {
/**
* (non-PHPdoc)
* @see protected/modules/generator/libraries/Generator/Action/Generator_Action_Form::configure_form()
*/
protected function configure_form() { $tab = new Generator_Form_Tab(Kohana::lang('generator/form.basic_data'));
$this->form->add_element($tab);
$fieldset = new Generator_Form_Fieldset();
$tab->add_element($fieldset);
$field = new Formject_Element_Field_Single_Text('acl_resource[name]');
$field->set_is_required(TRUE);
$field->set_label(new Formject_Element_Label($this->i18n('fields.name')));
$fieldset->add_element($field);
$field = new Formject_Element_Field_Single_Select('acl_resource[acl_resource_namespace_id]');
$field->set_options(ORM::factory('acl_resource_namespace')->select_list());
$field->set_is_required(TRUE);
$field->set_label(new Formject_Element_Label($this->i18n('fields.acl_resource_namespace_id')));
$fieldset->add_element($field);
$field = new Formject_Element_Field_Single_Checkbox_Boolean('acl_resource[permission]');
$field->set_label(new Formject_Element_Label($this->i18n('fields.permission')));
$fieldset->add_element($field);
//
$this->form->get_validation()
->pre_filter('trim')
->add_rules('acl_resource.name', 'required', 'length[1,255]', array($this, 'validate_name_acl_resource_namespace_id_uniqueness'))
;
}
/**
* Sprawdza unikalność nazwy i przestrzeni nazw zasobu.
*
* @param string $name Nazwa wersji użytkownika.
* @return bool TRUE jeśli nazwa i przestrzeń nazw jest unikalna, FALSE w przeciwnym wypadku.
*/
public function validate_name_acl_resource_namespace_id_uniqueness($name) { return Validation::factory(array())->db_uniqueness('acl_resources', array(
'name' => (string)$name,
'acl_resource_namespace_id' => (int)$this->input->request('obj.acl_resource_namespace_id')
), array(
'id !=' => (int)$this->input->request('id', 0)
));
}
}
Generalnie modyfikacji jest mnóstwo, większość bezpośrednio w samym katalogu "system". Przyznasz więc, że Twoja aktualna własna Kohana ma przed sobą jeszcze długą drogę ;)
Marek Bednarczuk Freelancer
