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.

konto usunięte

Temat: Modyfikacja Kohana 3.8.x

Czy gdzieś można poczytać o poczynionych zmianach?

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 masz

konto usunięte

Temat: Modyfikacja Kohana 3.8.x

A co planujesz dokładnie jeszcze tam pozmieniać, ulepszyć?

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

Michał Płonka 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ę ;)

Temat: Modyfikacja Kohana 3.8.x

WoW... no pewnie, że długa droga, bardzo bym nawet powiedział. Tylko z tą różnicą, że mnie się nie śpieszy. Na razie zbudowałem dwa serwisy w oparciu o czystą KO3. Zauważyłem że oba używają tych samych usprawnień, które wrzuciłem do mojego moda. Pisze kolejne już w oparciu o moda, a co za tym idzie pojawią się kolejne wspólne rzeczy, które wrzucę do moda.

Następna dyskusja:

Co to jest Kohana?




Wyślij zaproszenie do