Балуюсь в кохану 17.12.2024
Всем добрый вечер!
Буду баловаться коханой. Это такой PHP фреймворк см. https://ru.wikipedia.org/wiki/Kohana.
Я установил её тут C:\xampp\htdocs\koh
Вызываю в веб браузере http://localhost/koh/public/
Отображается в браузере следующее:
Environment Tests
The following tests have been run to determine if Kohana will work in your environment. If any of the tests have failed, consult the documentation for more information on how to correct the problem.
| PHP Version | 7.4.2 |
|---|---|
| System Directory | C:\xampp\htdocs\koh\system\ |
| Application Directory | C:\xampp\htdocs\koh\application\ |
| Cache Directory | C:\xampp\htdocs\koh\application\cache\ |
| Logs Directory | C:\xampp\htdocs\koh\application\logs\ |
| PCRE UTF-8 | Pass |
| SPL Enabled | Pass |
| Reflection Enabled | Pass |
| Filters Enabled | Pass |
| Iconv Extension Loaded | Pass |
| Mbstring Not Overloaded | Pass |
| Character Type (CTYPE) Extension | Pass |
| URI Determination | Pass |
✔ Your environment passed all requirements.
Remove or rename the install.php file now.
Optional Tests
The following extensions are not required to run the Kohana core, but if enabled can provide access to additional classes.
| PECL HTTP Enabled | Kohana can use the http extension for the Request_Client_External class. |
|---|---|
| cURL Enabled | Pass |
| OpenSSL Enabled | Pass |
| Mcrypt Enabled | Kohana can use the Mcrypt extension for the Encrypt class. |
| GD Enabled | Pass |
| PDO Enabled | Pass |
Моя ФЛ Он и ОнаТеперь нужно удалить в папке C:\xampp\htdocs\koh\public файл install.php.
Теперь в браузере я перехожу по ссылке http://localhost/koh/public/index.php/welcome и вижу на экране
hello, world!
Вот код Welcome.php:
<?php
class Controller_Welcome extends Controller {
public function action_index() {
$this->response->body('hello, world!');
}
}
Моя ФЛ Он и ОнаТеперь давайте изменим код.
1. В папке C:\xampp\htdocs\koh\application\views добавим файл main.php,и напишим следующее:
<!DOCTYPE html>
<html>
<head>
<title><?=$title; ?></title>
</head>
<body>
<div><?=$content; ?></div>
</body>
</html>
2. А файл C:\xampp\htdocs\koh\application\classes\Controller изменим так:
<?php
class Controller_Welcome extends Controller {
public function action_index() {
$this->response->body(View::factory('main', array('title' => 'Title', 'content' => 'Hello World!')));
}
}
3. Вызовем в браузере так, вуаля!:

Моя ФЛ Он и Она2. А файл C:\xampp\htdocs\koh\application\classes\Controller изменим так:
Точнее файл C:\xampp\htdocs\koh\application\classes\Controller\Welcome.php.
Моя ФЛ Он и ОнаДавайте побалуемся с переводом/i18n.
Для перевода нужно следующее сделать:
1. В папке C:\xampp\htdocs\koh\application\i18n добавить файлы языков.
2. У нас их будут 2 файла один de.php, а другой en.php:
Вот файл de.php:
<?php
return array('label1' => 'Das ist ein Text:');
А вот файл en.php:
<?php
return array('label1' => 'This is a text:');
3. В файле C:\xampp\htdocs\koh\application\views\main.php нужно написать следующее:
<!DOCTYPE html>
<html>
<head>
<title><?=$title; ?></title>
</head>
<body>
<div><?php echo __('label1'); ?><?=$content; ?></div>
</body>
</html>
4. В файле C:\xampp\htdocs\koh\application\classes\Controller\Welcome.php надо написать следующее:
<?php
class Controller_Welcome extends Controller {
public function action_index() {
I18n::lang('de');
$this->response->body(View::factory('main',
array('title' => 'Title', 'content' => 'Hello World!')));
}
}
5. Вуаля! Результат Das ist ein Text:Hello World!:
Но если мы напишем так:
<?php
class Controller_Welcome extends Controller {
public function action_index() {
I18n::lang('en');
$this->response->body(View::factory('main',
array('title' => 'Title', 'content' => 'Hello World!')));
}
}То будет так This is a text:Hello World!:

Моя ФЛ Он и ОнаЯ коханой начал баловаться в 2010-2012 гг., т.к. хотел сильно устроится на работу. Но мне слали сплошные отказы.
Моя ФЛ Он и ОнаВообще кохана с Украинского переводится как любимый. А кохана мне очень понравилась. Если что кохана это PHP библиотека поэтому она, но можно называть фреймворком, тогда он, а не она. Но мне нравится она называть, т.е. библиотекой.
Моя ФЛ Он и ОнаВообще я учился программировать на кохане на этом ютуб канале https://www.youtube.com/watch?v=kxBnXc6Nh_w&list=PLE9227E1.... После того как изучил кохану, смог освоить Yii, немножко Symfony, и ASP NET MVC. И создал свой PHP MVC фреймворк, похожий на фреймворк кохана.
Моя ФЛ Он и ОнаКороче продолжим. Спомощью метода I18n::lang устанавливаем язык, допустим если нужно вызвать немецкий то I18n::lang('de');, а если английский то I18n::lang('en'); Кохана читает из файлов если на немецком то de.php, а если на английском то en.php. А во вьюшки отображаем спомощью <?php echo __(тут текстовка); ?> допустим <?php echo __('label1'); ?>
Моя ФЛ Он и ОнаПродолжим баловаться в кохану. Если вы будете работать на фирме, и в MVC если вы напишите типа такого:
<script src="jquery.min.js"> <link rel="stylesheet" type="text/css" href="main.css">
или такого:
<form method="POST" action="save.php"> ... </form>
то скорей всего вас уволят с работы.
Моя ФЛ Он и ОнаВ Kohana есть специальные хелперы.
Вместо этого HTML:
<script src="jquery.min.js"> <link rel="stylesheet" type="text/css" href="main.css">
Нужно писать вот так на PHP:
<?=HTML::script('jquery.min.js'); ?>
<?=HTML::style('main.css'); ?>
А вместо этого HTML:
<form method="POST" action="save.php"> ... </form>
Нужно писать вот так на PHP:
<?=Form::open('test/save'); ?>
...
<?=Form::close(); ?>
Моя ФЛ Он и ОнаВсё это я делаю во вьювшки test_view.php:
<!DOCTYPE html>
<html>
<head>
<title><?=$title; ?></title>
<?=HTML::script('jquery.min.js'); ?>
<?=HTML::style('main.css'); ?>
</head>
<body>
<?=Form::open('test/save'); ?>
<?=Form::close(); ?>
</body>
А вызываю вьювшку из контроллера Test.php:
<?php
class Controller_Test extends Controller {
public function action_index() {
$this->response->body(View::factory('test_view',
array('title' => 'Title')));
}
}
Моя ФЛ Он и ОнаВуаля! После запуска в веб браузере в итоге благодаря Kohana Framework PHP сгенерирует такой HTML код:
<!DOCTYPE html> <html> <head> <title>Title</title> <link type="text/css" href="/kohana/test.css" rel="stylesheet" /> <script type="text/javascript" src="/kohana/test.js"></script></head> <body> <form action="/kohana/index.php/test/save" method="post" accept-charset="utf-8"> </form> </body>
Моя ФЛ Он и ОнаПродолжаем дальше баловаться в кохану, вспоминать 2010 г. Сегодня отобразим jpeg картинку, но сначало уменьшим её.
1. Настроим bootstrap.php вот оригинал:
C:\xampp\htdocs\koh\application\bootsrap.php /** * Enable modules. Modules are referenced by a relative or absolute path. */ Kohana::modules([ // 'auth' => MODPATH . 'auth', // Basic authentication // 'cache' => MODPATH . 'cache', // Caching with multiple backends // 'codebench' => MODPATH . 'codebench', // Benchmarking tool // 'database' => MODPATH . 'database', // Database access // 'image' => MODPATH . 'image', // Image manipulation // 'minion' => MODPATH . 'minion', // CLI Tasks // 'orm' => MODPATH . 'orm', // Object Relationship Mapping // 'unittest' => MODPATH . 'unittest', // Unit testing // 'userguide' => MODPATH . 'userguide', // User guide and API documentation ]);
Нужно раскоментировать строчку:
'image' => MODPATH . 'image', // Image manipulation
Вот так теперь получится:
/**
* Enable modules. Modules are referenced by a relative or absolute path.
*/
Kohana::modules([
// 'auth' => MODPATH . 'auth', // Basic authentication
// 'cache' => MODPATH . 'cache', // Caching with multiple backends
// 'codebench' => MODPATH . 'codebench', // Benchmarking tool
// 'database' => MODPATH . 'database', // Database access
'image' => MODPATH . 'image', // Image manipulation
// 'minion' => MODPATH . 'minion', // CLI Tasks
// 'orm' => MODPATH . 'orm', // Object Relationship Mapping
// 'unittest' => MODPATH . 'unittest', // Unit testing
// 'userguide' => MODPATH . 'userguide', // User guide and API documentation
]);
2. В папку C:\xampp\htdocs\koh\public поместим вот этот файл image.jpg:

3. Теперь в файл C:\xampp\htdocs\koh\application\classes\Controller\Image.php напишим так:
<?php
class Controller_Image extends Controller {
public function action_index() {
$str_path = DOCROOT . '/image.jpg';
$obj_img = Image::factory($str_path)->
resize(320, 240)->
render('jpg');
$this->response->headers('Content-Type',
File::mime($str_path))->body($obj_img);
}
}
4. Вуаля! А вот и результат!:

Моя ФЛ Он и ОнаПродолжаем баловаться в кохану. Улучшим код.
Вот вьюшка см. C:\xampp\htdocs\koh\application\views\image.php:
<!DOCTYPE html> <html> <head> <title><?=$title; ?></title> </head> <body> <h1>Картинка</h1> <?=HTML::image($src); ?> </body> </html>
Вот контроллер см. C:\xampp\htdocs\koh\application\classes\Controller\Image.php:
<?php
class Controller_Image extends Controller {
public function action_index() {
$this->response->body(View::factory('image',
array('title' => 'Image Test', 'src' => 'http://localhost/koh/public/index.php/image/showimage')));
}
public function action_showimage() {
$str_path = DOCROOT . '/image.jpg';
$obj_img = Image::factory($str_path)->
resize(320, 240)->
render('jpg');
$this->response->headers('Content-Type',
File::mime($str_path))->body($obj_img);
}
}
Вуаля! А вот и результат:

Моя ФЛ Он и ОнаТеперь повернём картинку на 45°.
Вот код контроллера C:\xampp\htdocs\koh\application\classes\Controller\Image.php:
<?php
class Controller_Image extends Controller {
public function action_index() {
$this->response->body(View::factory('image',
array('title' => 'Image Test', 'src' => 'http://localhost/koh/public/index.php/image/showimage', 'src_rotate' => 'http://localhost/koh/public/index.php/image/rotateimage')));
}
public function action_showimage() {
$str_path = DOCROOT . '/image.jpg';
$obj_img = Image::factory($str_path)->
resize(320, 240)->
render('jpg');
$this->response->headers('Content-Type',
File::mime($str_path))->body($obj_img);
}
public function action_rotateimage() {
$str_path = DOCROOT . '/image.jpg';
$obj_img = Image::factory($str_path)->
resize(240, 320)->
rotate(45)->
render('jpg');
$this->response->headers('Content-Type',
File::mime($str_path))->body($obj_img);
}
}
Вот код вьюшки C:\xampp\htdocs\koh\application\views\image.php:
<!DOCTYPE html> <html> <head> <title><?=$title; ?></title> </head> <body> <h1>Картинка</h1> <?=HTML::image($src); ?> <br><br> <h1>Картинка повёрнутая на 45 градусов</h1> <?=HTML::image($src_rotate); ?> </body>
Вуаля! А вот и результат:

Моя ФЛ Он и ОнаЧтобы фон стал белым когда я повернул картинку на 45°, нужно вызвать метод background, т.е. так background('#fff'). Вот изменил код, а точнее добавил метод background('#fff'), теперь фон стал белым а не чёрным как выше:
public function action_rotateimage() {
$str_path = DOCROOT . '/image.jpg';
$obj_img = Image::factory($str_path)->
resize(240, 320)->
rotate(45)->
background('#fff')->
render('jpg');
$this->response->headers('Content-Type',
File::mime($str_path))->body($obj_img);
}
Вуаля! Теперь белый фон:

Моя ФЛ Он и Она