2015-06-28 7 views
3

Я уже видел много вопросов, которые очень похожи на этот вопрос (например, как this one и this), но моя проблема заключается в том у меня есть контроллеры в подпапке в папке внутри контроллеры папка. Моя структура каталогов выглядит следующим образом:Kohana 3.2 контроллеров классов/контроллеры/<subfolder>/<subfolder>

classes/ 
    controllers/ 
     admin/ 
      manageMemberProfile/ 
       memberList.php 
       memberProfileInfo.php 
       editMemberProfile.php 
      manageCompanyProfile/ 
       ........ 
     member/ 
      ........ 

     guest/ 
      ........ 

    models/ 
     ........ 

Пожалуйста, обратите внимание, что я уже сделал решение в ссылке я предоставил (и сумел заставить его работать), но его только для контроллеров, которые находятся в папке внутри контроллеры папка. Я хочу, чтобы вызвать мои контроллеры с такой настройкой каталога. Я совершенно новый для маршрутизации в kohana 3.2, поэтому я действительно не знаю, как это решить, и я также прочитал их документацию о маршрутизации, но я все еще не могу решить эту проблему.

ответ

1

Ответы, указанные в ссылках, также работают здесь. Вам просто нужно добавить подкаталог, например. например

Route::set('admin_manageMembersProfile', 'admin/manageMembersProfile(/<controller>)') 
    ->defaults(array(
     'directory' => 'admin/manageMembersProfile', 
     'controller' => 'defaultController', 
     'action' => 'defaultAction', 
    )); 

Конечно, будет необходимо сделать это для каждого подкаталога. Таким образом, вы могли бы использовать Lambda/Callback route logic:

Route::set('admin', function($uri) { 
    $directories = array('manageMembersProfile', 'manageOthers'); 
    if (preg_match('#^admin/('.implode('|', $directories).')(/[^/]+)*#i', $uri, $match)) { 
     $subdirectory = $match[1]; 
     if (array_key_exists(2, $match)) { 
      $controller = trim($match[2], '/'); 
     } else { 
      $controller = 'defaultController'; 
     } 
     if (array_key_exists(3, $match)) { 
      $action = trim($match[3], '/'); 
     } else { 
      $action = 'defaultAction'; 
     } 
     return array(
      'directory' => 'admin/'.$subdirectory, 
      'controller' => $controller, 
      'action' => $action, 
     ); 
    } 
}); 

Это лишь очень простой пример, но я надеюсь, что он показывает, как вы можете справиться с маршрутизацией таким образом.

+0

Должен ли я изменить имя моего контроллера на «Controller_Guest_MemberProfileInfo»? Потому что Im пытается ваше первое решение, но оно все еще не работает. –

+1

@boi_echos. В примере администратора контроллер должен быть назван 'Controller_Admin_ManageMembersProfile_MemberList' - каждый подкаталог должен быть добавлен с помощью' _' – kero

+0

Wow его теперь работает. Благодарю. У меня возникла проблема с вызовом действия в контроллере, и я обнаружил, что вам нужно добавить «(/ )» в маршрут. –