В Kohana 3, как я могу сказать помощнику формы прекратить вставку 'index.php' - PullRequest
4 голосов
/ 18 января 2010

Когда я использую form::open в Kohana 3, я получаю это

<form action="/my-site/index.php/bla" method="post" accept-charset="utf-8"> 

Нигде на моем сайте я не полагаюсь на наличие index.php. Я думаю, это выглядит некрасиво. Есть ли простой способ удалить index.php из него.

Очевидно, я знаю, что могу сделать str_replace(), но я подумал, что может быть более элегантный способ?

Ответы [ 4 ]

7 голосов
/ 18 января 2010

для Kohana3 это делается почти так же, как в Kohana2.x:

в application / bootstrap.php - это вызов инициализации:

Kohana::init(array(
  'base_url'   => '/',
  'index_file' => FALSE // This removes the index.php from urls
));

Это удаляет index.php из всех сгенерированных URL. Нет необходимости перегружать / редактировать любой класс Kohana.

Обратите внимание, что вам придется использовать файл .htaccess

6 голосов
/ 18 января 2010

Kohana (так же как CodeIgniter и большинство других фреймворков) использует Pattern Front-Controller (index.php), поэтому, если вы не взломали его глубоко, я не могу понять, как вам не нужно полагаться на нем.

После быстрого просмотра источника 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 следующим образом:

return URL::base(TRUE, $protocol).$path.$query.$fragment;

На это:

return URL::base(FALSE, $protocol).$path.$query.$fragment;

Все index.php появления должны исчезнуть.


Я не уверен, сработает ли это, но в application/bootstrap.php измените это:

Kohana::init(array('base_url' => '/kohana/'));

На это:

Kohana::init(array('base_url' => '/kohana/', 'index_file' => ''));
1 голос
/ 18 января 2010

Я не играл с Kohana 3, за исключением нескольких минут.

В Kohana 2 есть настройка конфигурации, которую можно установить на пустую строку

$config['index_page'] = '';

Один из моих коллегЯ работаю в команде разработчиков Kohana 3, так что, если у вас нет четкого ответа на этот вопрос к завтрашнему дню, я могу спросить его.Беглый взгляд на form.php показывает, что значение NULL для действия получит значение из Request :: instance () -> uri (), которое, в свою очередь, получит свои значения из класса Route.Вы, вероятно, могли бы найти ответ, просто проследив назад инстанцирование Routing, чтобы увидеть, что и где устанавливается.В противном случае, как я уже говорил, я попрошу своего коллегу завтра.

0 голосов
/ 12 мая 2010

В дополнение к ответу Каспера, здесь есть файл KO3 .htaccess по умолчанию (переименован из example.htaccess), который позволяет переписывать URL.

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /kohana/

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
...