受到其他社区wiki的启发,我有兴趣听到鲜为人知的Kohana提示,技巧和功能。
这是社区维基。
答案 0 :(得分:23)
$options = ORM::factory('model')
->order_by('title','ASC')
->find_all()
->as_array('id','title');
$select = Form::select('name', $options);
应该注意,这不仅限于ORM,可以用于所有数据库结果(它们都支持as_array)。有关详细信息,请参阅database results信息。
如果您想添加默认选项:
$options = Arr::merge(array('Please select a value.'), $options);
答案 1 :(得分:17)
echo Database::instance()->last_query
取自In Kohana 3, how do you figure out errors made during a query?。
答案 2 :(得分:17)
将这些行粘贴到.htaccess
:
SetEnvIf SERVER_ADDR "^(127\.0\.0\.1|::1)$" KOHANA_ENV=development
SetEnvIf SERVER_ADDR "^((?!127\.0\.0\.1|::1).)*$" KOHANA_ENV=production
现在,如果您使用的是localhost,则表示您处于开发模式,否则您处于生产模式
修改:添加了对IPv6的支持
答案 3 :(得分:15)
ORMs add
函数接受第三个参数,您可以在其中指定要保存在1pivot table1上的其他数据。
例如,如果用户具有多个角色且角色具有许多用户(通过名为1roles_users1的表),则可以通过将列键和数据值数组作为第3个参数传递给1pivot table1来保存信息。 add
方法。
不支持。另一种方法是加载pivot table
并像添加任何其他表一样添加数据。
$user->add('role', $role, array('date_role_added' => time()));
$role
为ORM::factory('role', array('name' => 'user'));
答案 4 :(得分:15)
this->request->route->uri()
与this->request->uri()
之间的差异(Kohana 3)
// Current URI = welcome/test/5
// Using default route ":controller/:action/:id"
// This returns "welcome/test/5"
echo $this->request->uri();
// This returns "welcome/test1/5"
echo $this->request->uri(array( 'action' => 'test1' ));
// This returns "welcome/index"
echo $this->request->route->uri();
// This returns "welcome/test1"
echo $this->request->route->uri(array( 'action' => 'test1' ));
如您所见,$ this-> request-> route-> uri()使用当前路由默认值(id为null),而$ this-> request-> uri()应用当前uri段。
答案 5 :(得分:12)
这些代码示例假设您正在从模板控制器扩展。
public function before()
{
parent::before();
if (Request::current()->is_ajax())
{
$this->auto_render = FALSE;
}
}
public function before()
{
parent::before();
if (Request::$is_ajax)
{
$this->auto_render = FALSE;
}
}
答案 6 :(得分:11)
不要在HTML和PHP中对锚点位置进行硬编码,而是反向路由。这实际上意味着您定义路线位置然后使用它们;如果你需要改变它在一个地方而不是数百个地方完成的位置。
路由可以在任何地方定义,但最好将它们放入应用程序引导程序或模块引导程序(init.php)中。
它们设置如下:
Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
<part>
匹配的内容。当零件被括号括起时,该零件是可选的。如果用户未提供零件而您想提供默认值,则使用defaults方法指定值。
->defaults(array('action' => 'login'));
以下代码现在用于具有可逆路由。可以更新网址路径,并且所有网址 应该像以前一样工作。
Route::url('name', array('controller' => 'user', 'action' => 'login'));
答案 7 :(得分:9)
这些称为子请求。看看Sam de Freyssinets的文章:Scaling Web Applications with HMVC ,以获得更深入的解释。注意版本之间的初始与实例差异。
if (Request::initial() !== Request::current())
{
print 'Internal called made with Request::factory';
}
if (Request::instance() !== Request::current())
{
print 'Internal called made with Request::factory';
}
答案 8 :(得分:9)
自动设置base_url
:
Kohana::init(array(
// ...
'base_url' => dirname($_SERVER['SCRIPT_NAME']),
// ...
));
如果您的网站托管在1&amp; 1,则应使用:
Kohana::init(array(
// ...
'base_url' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"])));
// ...
));
答案 9 :(得分:7)
此函数检查内部和AJAX请求。如果页面的某些部分最初使用HMVC技术加载,则可能很方便,然后可以使用AJAX重新加载。 放置一些基本控制器,从中扩展所有适当的控制器(我称之为“基本控制器”):
public function is_remote()
{
if ($this->request->is_initial())
{
if ($this->request->is_ajax())
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return TRUE;
}
}
一种较短(相当)的写作方式:
public function is_remote()
{
return ( ! $this->request->is_initial() || $this->request->is_ajax());
}
希望这有帮助。
答案 10 :(得分:6)
如果您需要显示错误页面,Kohana已为其构建了例外情况。一旦抛出异常,就可以创建自定义异常处理程序并显示HTML错误页面。您需要一个开关来显示开发中的真实错误。
throw new HTTP_Exception_404('The article :article was not found',
array(':article' => $article->name));
第二个参数提供了一种替换错误消息中字符串的方法。
没有捆绑的HTTP例外。您应该创建自己的异常并处理它们。 Kohana有一个教程:Kohana - Custom Error Pages
答案 11 :(得分:4)
要使用prepared statements执行TRUNCATE mytable
之类的SQL查询,请将null
作为第一个参数传递给DB::query()
方法。当查询不适合任何CRUD操作时很有用。