Как добавить тире между именами контроллеров в Kohana? - PullRequest
3 голосов
/ 04 июня 2011

Я работаю над модулем авторизации для Kohana 3.1.В моем модуле init.php ...

Route::set(

    'a11n',
    '<controller>',
    array(
        'controller' => 'signIn|signOut|signUp'
    )

);

Я не уверен на 100%, как использовать механизм маршрутизации Kohana, но с этим я пытаюсь добиться того, чтобы пользователь могвведите «signIn», «signOut» или «signUp» для запуска контроллеров из моего модуля.Видите ли, я хочу иметь «портативную» систему авторизации ... поэтому я могу просто «скопировать-вставить» нужный каталог, включить модуль и мой сайт имеет авторизацию.

Имейте в виду, с этим маршрутом я не пользуюсьне хочу каким-либо образом изменить поведение маршрутов по умолчанию.Я не знаю, насколько правильный мой код ... но он работает!Я проверил, и я могу получить тот же эффект без использования третьего параметра тоже.Чего я теперь добиваюсь с помощью этого?

А теперь вопрос ... Как я могу каким-то образом установить маршруты из модуля, набрав "вход" в пользовательский модуль запуска "Controller_SignIn"?

Ответы [ 3 ]

4 голосов
/ 05 июня 2011

Вы должны использовать маршруты для этого, что-то вроде этого:

Route::set('SignIn', '/sign-in(/<action>)',
        array(
            'action' => 'index|action1',
            )
        )
        ->defaults(
                array(
                    'controller' => 'SignIn',
                    'action' => 'index',
                    )
                );

Route::set('SignOut', '/sign-out(/<action>)',
        array(
            'action' => 'index|action1',
            )
        )->defaults(
                array(
                    'controller' => 'SignOut',
                    'action' => 'index',
                    )
                );

или

Route::set('SignIn', '/sign-in/',
        array()
        )
        ->defaults(
                array(
                    'controller' => 'user',
                    'action' => 'login',
                    )
                );

Route::set('SignOut', '/sign-out/)',
        array()
        )->defaults(
                array(
                    'controller' => 'user',
                    'action' => 'logout',
                    )
                );
3 голосов
/ 15 октября 2011

Я знаю, что на этот вопрос уже есть ответ, помеченный как решение, но есть способ очистки / другой способ сделать это:

Создайте новый файл в приложении: application/classes/request.php и вставьте следующий кодэтот файл:

<?php defined('SYSPATH') or die('No direct script access.');
class Request extends Kohana_Request
{
    public function execute()
    {
        $this->action(str_replace('-', '', $this->action()));
        $this->controller(str_replace('-', '', $this->controller()));
        return parent::execute();
    }
}

Теперь вам не нужно изменять / загрязнять ваш bootstrap.php для каждого пунктирного / дефисированного URL-адреса!

1 голос
/ 04 июня 2011

Почему вы создаете отдельные контроллеры для действий учетной записи?Создайте один контроллер (Controller_Account или что-то еще) с нужными вам действиями:

class Controller_Account extends Controller_Template {

    public function action_signin() {...}

    public function action_signout() {...}

    public function action_signup() {...}

}

Как видите, имена действий без тире.Вы не можете использовать их в именах методов.Но вот для этого есть хак:

public function before()
{
    parent::before(); // dont forget this call!
    // remove dashes from current method name
    $this->request->action(str_replace('-', '', $this->request->action()));
}

И маршрут:

Route::set(
       'a11n', 
       '<action>', 
       array('action' => array('sign-in|sign-up|sign-out'))
    )
    ->defaults(array('controller' => 'account'));

Конечно, вы можете использовать как имена входа и входа, просто добавьте не пунктирные именаRoute regex param:

Route::set(
       'a11n', 
       '<action>', 
       array('action' => array('sign-in|sign-up|sign-out|signin|signup|signout'))
    )
    ->defaults(array('controller' => 'account'));
...