Архив рубрики: Kohana

Kohana — фреймворк для вебразработок на PHP. Изначально развивался как ветка фреймворка CodeIgniter. В сравнении с CodeIgniter Kohana более продвинута, но гораздо хуже документирована.

В блоге больше освещалась версия Kohana3. Наиболее популярные посты:

* Kohana для чайников. Простейший ORM
* Модуль AUTH в Kohana
* Kohana для чайников. Инсталляция.
* Kohana для чайников. Hello world.
* Kohana для чайников. Настраиваем базу данных

Транзакции в Kohana

kohana

Внезапно мне понадобились транзакции на вебсайте. Кому это надо — тот знает о чём я. И встал вопрос, как по-возможности культурнее их сделать

Понятно, что всегда можно просто прямыми запросами к базе данных послать START TRANSACTION , COMMIT или ROLLBACK, но некрасиво это.

И вот оказывается есть прямо специальные функции в объекте Database. Вот собственно пример, думаю тут всё понятно.

	    $db = Database::instance();
	    
	    // Start the transactions
	    $db->begin();

	    try {
		DB::insert('users')->values($user1)...
		DB::insert('users')->values($user2)...
		// Insert successful commit the changes
		$db->commit();
	    }
	    catch (Database_Exception $e)
	    {
		// Insert failed. Rolling back changes...
		$db->rollback();
	    }	 

Kohana 3.2 Страница ошибки — дёшево и сердито!

kohanaЕсли вы хотите сделать полноценную обработку ошибок в Kohana, то нужно создавать свой класс Exception, наследник Kohana_Kohana_Exception, в котором мутить всю логику, потом создать под это дело контроллер с вьюсами и роутами.

Этот путь хорошо описан в мануале и довольно хорошо переведён и прокомментирован тут
Читать далее

Kohana 3.2. Валидация

kohana Когда-то я уже писал про это но те времена явно утекли, Кохана поменялась, поменялись и мои предпочтения. Вы, наверное, скажете мне, сети полно хороших мануалов по валидации, но я не успокоюсь, пока не напишу свой, в качестве шпаргалки.

Прежде чем буду описывать — оговорюсь. Я сторонник того, чтобы описывать всю валидацию в модели ORM. Религия у меня такая. Поэтому …
Читать далее

Kohana ORM. COUNT_ALL() и RESET(false)

kohana
Кто работал с пагинацией наверняка сталкивался с такой задачкой. Дана выборка со сложными фильтрами, надо узнать количество элементов всего и выдернуть, условно говоря, 10 элементов начиная с 30-го. Надо просто выполнить два похожих запроса. Например так:

$count= ORM::factory("post") -> 
            where("published","=",1) -> count_all();
$posts= ORM::factory("post") -> 
           where("published","=",1) -> 
           limit(10)->offset(30)-> found_all();

Обратите внимание, в этом примере у нас был фильтр published=1 . Пока всё просто и понятно. Мы просто дважды выполнили запрос со схожими фильтрами.

Но иногда фильтры бывают довольно сложными и генерироваться несколькими страницами кода. В таких случаях возникает соблазн один раз накопить фильтры, чтобы дважды потом использовать. Однако есть проблема. Функция count_all() сбрасывает ORM в ноль в том числе и все фильтры.
Читать далее

Проверка на правильность email

iЭто шпаргалочка по проверке валидности email.

Если Вы используете какой-нибудь PHP-фреймворк — то там конечно есть средcтва для валидации формы. В Kohana есть средства валидации формы. Но иногда нужно просто по-быстрому проверить правильность заполнения E-mail, без создания класса, задания полей, правил и прочего приготовления

В Kohana для таких целей есть такой хелпер Valid с набором нужных проверок

if(Valid::email($email)){
    echo "Email - правильный!";
}

Если без фреймворка можно так:

if(preg_match("/[0-9a-z_]+@[0-9a-z_\-^\.]+\.[a-z]{2,3}/i", $email)){
    echo "Email - правильный!";
}

UPD: Ещё один изящный пример (только php5) мне посоветовал Иван:

if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false){
    echo "Email - правильный!";
}