Мне тоже было трудно найти примеры для Kohana3, пример bestattendance - для Kohana2.
Вот пример, который я бросил вместе в своем тестировании:
приложения/классы/модель/news.php
<?php defined('SYSPATH') OR die('No Direct Script Access');
Class Model_News extends Model
{
/*
CREATE TABLE `news_example` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`title` VARCHAR(30) NOT NULL,
`post` TEXT NOT NULL);
*/
public function get_latest_news() {
$sql = 'SELECT * FROM `news_example` ORDER BY `id` DESC LIMIT 0, 10';
return $this->_db->query(Database::SELECT, $sql, FALSE)
->as_array();
}
public function validate_news($arr) {
return Validate::factory($arr)
->filter(TRUE, 'trim')
->rule('title', 'not_empty')
->rule('post', 'not_empty');
}
public function add_news($d) {
// Create a new user record in the database
$insert_id = DB::insert('news_example', array('title','post'))
->values(array($d['title'],$d['post']))
->execute();
return $insert_id;
}
}
применение/сообщений/errors.php
<?php
return array(
'title' => array(
'not_empty' => 'Title can\'t be blank.',
),
'post' => array(
'not_empty' => 'Post can\'t be blank.',
),
);
применение/классы/контроллер/n ews.php
<?php defined('SYSPATH') OR die('No Direct Script Access');
Class Controller_News extends Controller
{
public function action_index() {
//setup the model and view
$news = Model::factory('news');
$view = View::factory('news')
->bind('validator', $validator)
->bind('errors', $errors)
->bind('recent_posts', $recent_posts);
if (Request::$method == "POST") {
//added the arr::extract() method here to pull the keys that we want
//to stop the user from adding their own post data
$validator = $news->validate_news(arr::extract($_POST,array('title','post')));
if ($validator->check()) {
//validation passed, add to the db
$news->add_news($validator);
//clearing so it won't populate the form
$validator = null;
} else {
//validation failed, get errors
$errors = $validator->errors('errors');
}
}
$recent_posts = $news->get_latest_news();
$this->request->response = $view;
}
}
приложение/просмотров/news.php
<?php if ($errors): ?>
<p>Errors:</p>
<ul>
<?php foreach ($errors as $error): ?>
<li><?php echo $error ?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
<?php echo Form::open() ?>
<dl>
<dt><?php echo Form::label('title', 'title') ?></dt>
<dd><?php echo Form::input('title', $validator['title']) ?></dd>
<dt><?php echo Form::label('post', 'post') ?></dt>
<dd><?php echo Form::input('post', $validator['post']) ?></dd>
</dl>
<?php echo Form::submit(NULL, 'Post') ?>
<?php echo Form::close() ?>
<?php if ($recent_posts): ?>
<ul>
<?php foreach ($recent_posts as $post): ?>
<li><?php echo $post['title'] . ' - ' . $post['post'];?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
Чтобы получить этот код работает в установки по умолчанию, вы должны включить модуль базы данных и настроить его для проверки подлинности , Затем вы можете получить доступ к нему из index.php/news, используя конфигурацию по умолчанию.
Он протестирован в Kohana 3.0.7 и должен дать вам хорошую отправную точку в том, как вы можете выложить код. В отличие от других фреймворков, Кохана, кажется, очень открыт, когда вы ставите свою логику, так что это то, что имело для меня смысл. Если вы хотите использовать ORM вместо того, чтобы запускать собственное взаимодействие с базой данных, у него есть свой синтакт для проверки, который вы можете найти here
Я нахожу это забавным, что так лучше Kohana 3 документации, чем сам проект. Спасибо за отличный Q. – Brenden
Ну, код хорошо документирован на самом деле, и в паре с частью API модуля userguide я думаю, что это очень хорошо. Но может быть больше примеров, особенно в части, связанной с использованием. Много TODO и недостающих бит там тоже :) – Svish