当我使用form::openKohana 3时,我得到了这个
form::open
我的网站上没有任何地方依赖index.php.我觉得它看起来很难看.有没有一种简单的方法可以从中删除index.php.
显然我知道我可以做一个str_replace(),但我认为可能有更优雅的方式?
str_replace()
对于Kohana3,它的工作方式与Kohana2.x完全相同:
在application/bootstrap.php中是一个初始化调用:
Kohana::init(array( 'base_url' => '/', 'index_file' => FALSE // This removes the index.php from urls ));
这将从所有生成的URL中删除index.php.无需重载/编辑任何Kohana课程.
请注意,您必须使用.htaccess文件
Kohana(以及CodeIgniter和大多数其他框架)依赖于Front-Controller Pattern(index.php),所以除非你深入攻击它,否则我看不出你不需要依赖它.
index.php
快速浏览一下form::open()来源:
form::open()
public static function open($action = NULL, array $attributes = NULL) { if ($action === NULL) { // Use the current URI $action = Request::instance()->uri; } if ($action === '') { // Use only the base URI $action = Kohana::$base_url; } elseif (strpos($action, '://') === FALSE) { // Make the URI absolute $action = URL::site($action); } // ... }
我不认为没有指定绝对URL是可能的.如果你不介意做,可能是一个解决方案:
form::open('http://domain.com/my-site/bla');
否则,您最好的方法是str_replace() 使用应用程序帮助程序或覆盖它.
如果编辑url帮助程序(/system/classes/kohana/url.php)并从中更改第71行:
url
/system/classes/kohana/url.php
return URL::base(TRUE, $protocol).$path.$query.$fragment;
对此:
return URL::base(FALSE, $protocol).$path.$query.$fragment;
所有index.php外表都应该消失.
我不确定这是否有效,但application/bootstrap.php改变了这个:
application/bootstrap.php
Kohana::init(array('base_url' => '/kohana/'));
Kohana::init(array('base_url' => '/kohana/', 'index_file' => ''));