Kohana 3.2.3.1 当控制器位于子文件夹中时,路由不起作用

kohana 3.2.3.1 route not working when controller is in a sub folder

提问人:Glen Elkins 提问时间:10/7/2020 更新时间:10/11/2020 访问量:93

问:

我刚刚接到一个名为 Kohana 的 CRM 项目,直到现在我才听说过。

Everthing 工作正常,除了位于子文件夹中的控制器以及控制器名称不仅仅是一个单词时。

此控制器位于系统/费用 .php 中

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_System_Expenses extends Controller_System {

   public $header = 'Expenses';

   public function action_index() {
      
      $this->template->content = view::factory('system/expenses/listings');
      $this->template->content->expenses = expenses::get_all();
   }


   public function action_update() {
      $expenses = expenses::find_by_id(form::get_value('id'));
      expenses::update($expenses, form::data());

      $this->redirect(request::current()->referrer());
   }
}

当我尝试访问 /system/expenses 时,它给出了 404。如果我随后将控制器移动到基本控制器文件夹,它仍然不起作用,除非我将类重命名为 Controller_Expenses 而不是 Controller_System_Expenses然后适用于路由 /expenses

下面是引导.php文件:

Route::set('automate', 'hourly')
   ->defaults(array('controller' => 'cron',
               'action' => 'hourly'
         ));

Route::set('daily', 'daily')
   ->defaults(array('controller' => 'cron',
               'action' => 'daily'
         ));

Route::set('auth', '<action>',
      array(
        'action' => '(login|logout)'
      ))
    ->defaults(array(
        'controller' => 'auth',
        'action'     => 'login',
    ));


Route::set('super', 'system/(<controller>(/<action>(/<id>)))')
    ->defaults(array(
                'directory' => 'system',
        'controller' => 'settings',
        'action'     => 'index',
    ));


Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'Dashboard',
        'action'     => 'index',
    ));

如果我在这里专门为 url 添加路由也没关系,如果我删除“超级”路由,子文件夹中没有任何效果,即使我将控制器重命名为在“系统”控制器文件夹中Controller_Expenses我工作的路由只是 /expenses 仍然不起作用。

我不知这应该如何工作。

php kohana kohana-3.2

评论


答:

0赞 WinterSilence 10/11/2020 #1

区分大小写的目录/类名:

'directory' => 'System',
'controller' => 'Settings',

尾部斜杠:

'system(/<controller>(/<action>(/<id>)))'

可选参数的默认值:

'id' => 0,