Внимание: данный сайт находится в процессе формирования базового контента - уроков по PHP фреймворку Kohana. Сайт создаётся "для себя" и "как для себя" - что означает повышенные требования как к наглядности, так и работоспособности всех примеров этих уроков. Уроки строятся на базе Kohana 3.2 - наиболее актуальной версии на момент написания. За основу взяты переводы Антона Панкова ( http://prowebportal.com/blog/anton-pankov.html ) ( http://prowebportal.com/blogi/kohana-php/obuchalka-po-kohana-php-3.0-ko3-chast-1.html ) Необходимость в исправлении огромного количества ошибок и неточностей в процессе работы и исходной публикацией, а так-же существенные изменения в коде при переходе к версии 3.2 привели меня к мысли создать свою версию этих уроков и заодно в процессе их создания как следует выучить и закрепить изученный материал. Основной причиной всего этого является моё давнее неумение усвоить принципы и основы ООП. Так, что, как говориться: "Не было бы счастья, да несчастье помогло!" Очень надеюсь, что полученный мною в результате всего этого материал поможет вновь прибывшим в интернет для изучения основ программирования на базе PHP фреймворка Kohana 3.2 и более поздних версий по мере их появления. Как пишет автор оригинального пособия на английском языке: "Удачного Кодинга!"

воскресенье, 18 сентября 2011 г.

Kohana Урок второй






Создайте внутри каталога “application” папку “views”, а внутри папки “views” создайте папку “pages
Теперь откройте новый файл в вашем редакторе и введите:
<html>
	<head>
		<title>Hello!</title>
	</head>
	<body>
		<h1>This is my first view</h1>
	</body>
</html>

Теперь сохраните этот файл в “application/views/pages” как “ko3.php
Давайте откроем “ko3″ контроллер (“application/classes/controller/ko3.php”)
заменим класс “action_index” на следующие строки:
	public function action_index()
	{
		$this->response->body(View::factory('pages/ko3'));
	}

Сохраните и загрузите в браузере “http://localhost/mykohana3/ko3
Вы увидите надпись “This is my first view” на вашем экране
Код написанный выше достаточно простой
мы используем метод “Factory" для загрузки файла “application/views/pages/ko3.php", который обрабатывает и выводит вид
это не очень интересно так, что давайте вернемся к нашим видам (“application/views/pages/ko3.php”) и добавим после “h1″ тегов:
<?php echo $content;?>

Ваш вид должен выглядеть так:
<html>
	<head>
		<title>Hello!</title>
	</head>
	<body>
		<h1>This is my first view</h1>
	<?php echo $content;?>
	</body>
</html>

Если мы обновим браузер, мы увидим нештатную ошибку "undefined variable"
Так давайте же исправим её привязав данные к переменной в нашем контроллере
Поменяйте контроллер “action_index” на такой:
	public function action_index()
	{
		$view                       = View::factory('pages/ko3');
		$view->content              = 'We have data!';
		$this->response->body($view->render());
	}

Теперь если вы обновите страницу вы увидите “This is my first view” и ниже надпись “We have data!
Давайте, я вам обьясню по порядку каждую линию в коде
$view = View::factory('pages/ko3');
Это загружает наш файл вида (“application/views/pages/ko3.php”) в контроллер вида
$view->content = 'We have data!';
Привязываем переменную для использования вида под названием “content” и также присваиваем данные к нему, в данном случае это “We have data!”
$this->response->body($view->render());
Обрабатывает и выводит вид
Достаточно просто, но есть и другой способ сделать все описанное выше
Вам следует сделать:
	public function action_index()
	{
		$data['content']         = 'We have data!';
		$view                    = View::factory('pages/ko3', $data);
		$this->response->body($view->render());
	}

Выше используется массив с элементами ключей в виде шаблона имен переменных и данных
Существует 2 способа сделать это
	public function action_index() // v4 set
	{
		$view = View::factory('pages/ko3')
		->set('content', 'We have data!');

		$this->response->body($view->render());
	}

Выше используется метод видов, который можно использовать как цепочку методов для ваших шаблонных переменных
И еще один способ:
	public function action_index() // v5 bind
	{
		$content = 'We have data!';
		$view    = View::factory('pages/ko3')
			     ->bind('content', $content);

		$this->response->body($view->render());
	}




Выше используется bind метод из класса видов
Еще раз, вы можете использовать здесь цепочку методов
Так $content может быть эквивалентна ‘We have data!’, с того момента как мы устанавливаем переменную $content в наш контроллер, вместо привязывания данных к шаблонной переменной
Если мы сделали следующее:
	public function action_index() // v6 >>>
	{
		$content = 'We have data!';
		$view    = View::factory('pages/ko3')
		         ->bind('content', $content);
		$content                 = 'Our data changed';
		$this->response->body($view->render());
	} // v6 <<<

Вместо “We have data!” мы увидим “Our data changed”
Давайте теперь сделаем вид с видом внутри!
Создайте папку в “application/views/” под названием “blocks
Создайте другой файл вида “ko3_inner.php” и вставьте в него:
<h3>This is an inner view</h3>

Сохраните это в папке“application/views/blocks/
Теперь отредактируйте файл вида “ko3″ (“application/views/pages/ko3.php”) на:
render(); ?>

Ваш вид будет похож на:
<html>
	<head>
		<title>Hello!</title>
	</head>
	<body>
		<h1>This is my first view</h1>
		<?php echo $content;?>
		<?php echo View::factory('blocks/ko3_inner')->render(); ?>
	</body>
</html>

Если мы запустим, то увидим тоже, что и в прошлый раз, а потом “This is an inner view
Это будет полезно для статического контента, но мы не сможет использовать переменные вида
Давайте исправим это
Вернемся к нашему контроллеру (“application/classes/controllers/ko3.php”) и отредактируйте “action_index” метод, что бы он принял такой же вид:
	public function action_index() // v7 >>>
	{
		$ko3_inner['content']    = 'We have more data';
		$ko3['content']          = 'We have data';
		$ko3['ko3_inner']        = View::factory('blocks/ko3_inner', $ko3_inner)
		                         ->render();
		$view                    = View::factory('pages/ko3', $ko3);
		$this->response->body($view->render());
	} // v7 <<<

Это сформирует вид в массив который, будет формироваться с помощью основного вида
Если вы заметили я сделал сначала другие вещи первыми, а только потом вернулся с использованию массива и шаблонных переменных
Далее нам надо отредактировать основой вид (“application/views/pages/ko3.php”)
Линию которую мы ввели до этого теперь заменим на:
???
Теперь вид должен выглядеть так:
<html>
	<head>
		<title>Hello!</title>
	</head>
	<body>
		<h1>This is my first view</h1>
		<?php echo $content;?>
		<?php echo $ko3_inner;?>
	</body>
</html>

Итак последние изменения для внутреннего вида (“application/views/blocks/ko3_inner.php”).
Изменим на эти:
<h3>This is an inner view</h3>
<?php echo $content;?>

Если вы обновите страницу после сохранения, то вы увидите следующее:
This is my first view
We have data
This is an inner view
We have more data

Довольно интересно, теперь вы можете сделать ваши виды более модульными и многоразовыми
Давайте займемся тем, что сделаем переменные более доступными для наших видов
Вернитесь к вашему контроллеру (“applications/classes/controllers/ko3.php”) и измените метод “Action_Index” так , что бы эта строка была сверху метода:
View::set_global('x', 'This is a global variable');

Теперь ваш метод должен выглядеть вот так:
	public function action_index() // v8 >>>
	{
		View::set_global('x', 'This is a global variable');

		$ko3_inner['content']    = 'We have more data';
		$ko3['content']          = 'We have data';
		$ko3['ko3_inner']        = View::factory('blocks/ko3_inner', $ko3_inner)
		                         ->render();
		$view                    = View::factory('pages/ko3', $ko3);
		$this->response->body($view->render());
	} // v8 <<<

Теперь если вы редактировали виды - добавьте:
<?php echo $x;?>

Теперь вы можете увидеть “This is a global variable” 2 раза на странице
Как вы можете заметить это очень удобно
Мы используем статический метод “set” из класса видов, он перестает быть доступным для других видов объектов
Вы также можете использовать статический метод “bind” для reference переменных
В следующей части я расскажу про “шаблоны” (улучшенные виды для контроллеров)
удачного кодинга!
Использованы материалы: Unofficial Kohana 3 Wiki

Kohana Урок первый - установка и знакомство

Kohana 3.2


По материалам сайта prowebportal.com (ru) и dealtaker.com (en)

Примечание: везде в тексте, где встречаются адреса вида http://localhost/* вы можете использовать адреса вида http://127.0.0.1/* либо http://YOURHOSTNAME/* где YOURHOSTNAME - имя вашего компьютера в сети.
Все варианты полностью эквивалентны и не сказываются на работоспособности примеров.
Для редактирования соответствия имени хоста локальному адресу 127.0.0.1 и его символьному синониму localhost необходимо отредактировать файл hosts.
В операционной системе MS Windows этот файл расположен по адресу *.
В линукс как правило *.

Проверьте, есть ли у вас всё необходимое для эффективного обучения.
Вот, основные требования:

*AMP (Apache MySQL PHP)
Знание PHP
Знание что такое фреймворк
Знание что такое MVC

Загрузка:

Скачайте последнюю Kohana 3.2 и разархивируйте в любое место.

Установка:

распакуйте скачанный файл в текущую директорию.

в моём случае при распаковке была создана директория "kohana-3.2-master-1".

Откройте эту папку. Откройте новое окно и корневую папку вашего *AMP. В последний раз когда я использовал WAMP сервер путь выглядел так “C:\wamp\www\”.

создайте новую папку “mykohana3″. Скопируйте файлы из “kohana-3.2-master-1” в “mykohana3″. Проверьте что ваш *AMP работает, а затем введите в вашем браузере “http://localhost/mykohana3/”. Все должно быть “OK” и работать.

Если всё “OK”, переименуйте в папке “mykohana3" файл “install.php”.


Далее откройте файл “example.htaccess” и измените следующую строку:

RewriteBase /

на:

RewriteBase /mykohana3/

И сохраните файл как “.htaccess”.

Далее откройте “bootstrap.php”. Файл находится в папке “application” и измените следующую строку:

Kohana::init(array('base_url' => '/'));

на:

Kohana::init(array('base_url'  => '/mykohana3/',
	'index_file'=> ''));

Сохраните и обновите браузер. У вас должно получится что-то вроде “hello, world!” на вашем экране.

Давайте сделаем наш первый контроллер.

Откройте новый документ и введите в него:

defined('SYSPATH') or die('No direct script access.');
class Controller_Ko3 extends Controller
{
	public function action_index()
	{
		$this->response->body() = 'My First Kohana 3.2 Controller';
	}
}

Сохраните как “ko3.php” в папке “application/classes/controller”. Вы могли заметить еще одно отличие от Kohana 2.3.x. В 3.2 немного другая структура каталогов, хотя на самом деле это не такое большое отличие. Теперь, когда вы сохранили, введите в браузер “http://yourhost/mykohana3/ko3″. На экране должно высветиться “My First Kohana 3.2 Controller”.

Вот объяснение кода.

defined('SYSPATH') or die('No direct script access.');

Эта строка говорит PHP не открывать этот файл напрямую. Он может быть введен только, через фреймворк.

class Controller_Ko3 extends Controller

Создает контроллер, который является расширенным классом контроллеров, которые являются частью фреймворка.

public function action_index()

Создает метод под названием “action_index”. Метод “action_index” стандартное действие, которое выполняется фреймворком. Это как файл index.php.

$this->response->body() = 'My First Kohana 3.2 Controller';

Это будет выводить на экран “My First Kohana 3.0 Controller”. Работает по принципу “echo”.


Если вы хотите добавить дополнительное действие в ваш контроллер – вам следует добавить другой метод с префиксом "action_" и дать доступ через “http://localhost/mykohana3/controller/action


Давайте пойдем дальше и добавим новый метод в наш “ko3″ контроллер добавлением следующего “action_index” метод:

	public function action_another()
	{
		$this->response->body('Another action');
	}

Сохраните файл и запустите его через браузер “http://localhost/mykohana3/ko3/another”. Если вы всё сделали правильно, вы увидите надпись "Another action" на вашем экране.

давайте сделаем его более динамичным!

Скопируйте этот код и поставьте после “action_another” method:

	public function action_dynamic()
	{
		$param = $this->request->param();
		$say = $param['id'];
		$this->response->body('You said: '.$say);
	}

Сохраните и загрузите “http://localhost/mykohana3/ko3/dynamic/Monkey” и вы увидите “You said: Monkey

Ждите продолжения, удачного вам кодинга!

Использованы материалы: Unofficial Kohana 3 Wiki

Часть 2 >>