- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我找到了有关模型和验证的示例和教程。我说验证(或至少大部分验证)应该在模型中,我同意这一点。但是我无法提供任何示例或教程来说明应该如何完成。
谁能帮我举一个简单的例子来说明如何做到这一点?模型中的规则在哪里?验证将在哪里进行? Controller 如何知道验证是通过还是失败? Controller 如何获得错误消息和类似信息?
希望有人能帮忙,因为在这里感觉有点迷茫:p
最佳答案
我也很难找到 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;
}
}
application/messages/errors.php
<?php
return array(
'title' => array(
'not_empty' => 'Title can\'t be blank.',
),
'post' => array(
'not_empty' => 'Post can\'t be blank.',
),
);
应用程序/类/ Controller /news.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;
}
}
application/views/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 中进行了测试,应该为您如何布局代码提供一个良好的起点。与其他框架不同,Kohana 似乎对您将逻辑放在哪里非常开放,所以这对我来说才有意义。如果你想使用 ORM 而不是滚动你自己的数据库交互,它有自己的验证语法,你可以找到 here
关于php - 小花 3 : Example of model with validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462201/
我如何在 Kohana 3 中订购使用 has_many 关联的查询? 最佳答案 您是否尝试过类似$model->items->order_by('fieldname')->find_all() 的方
我正在将 Kohana v3 用于 Web 项目,今天我发现自己在写这个: echo Html::anchor('user/view/'.$user->id, "See user's profile"
Kohana 3 的 ORM 中是否有任何方法可以在模型中运行一段代码,但仅在从数据库加载该模型之后?一个简单的例子是必需的 has_one 关系。 ORM::factory('user')->
我找到了有关模型和验证的示例和教程。我说验证(或至少大部分验证)应该在模型中,我同意这一点。但是我无法提供任何示例或教程来说明应该如何完成。 谁能帮我举一个简单的例子来说明如何做到这一点?模型中的规则
最近我一直在研究 SEO 以及使用连字符或下划线的 URI 如何被区别对待,尤其是 Google 将连字符视为分隔符。 无论如何,急于调整我当前的项目以满足此标准,我发现因为 Kohana 使用函数名
我有一个看起来像这样的数据库关系: booking -> person option -> : one-to-many : many-to-many 我现在需要列出预订中的所有人,以及他们的所有
我在 Kohana 2.3.4 中管理一个项目,我需要在其中为我的 android 后端创建一个 API。我正在做的是在我的模型上发送一个查询,该查询返回 $result。 $query = "sel
我正在尝试将 UTF-8 字符(即德语口音)发布到外部站点。然而,当它到达那里时,它看起来像这样: ö 而不是这个: ö 如果我使用适当的 UTF-8 header 进行 var_dump(),我会
我正在尝试遍历 tutorial for kohana 我已经复制了脚本,但收到以下错误消息: ERROR: Database_Exception [ 2 ]: mysql_connect(): Ac
我是一名优秀的程序员,十分优秀!