2012-01-25 4 views
2

Итак, я пытаюсь установить и запустить Conhana. Я очень новичок в этой области и вообще в целом (хотя я немного использовал CakePHP).Kohana: Запрошенный URL не найден

... В любом случае в моем файле начальной загрузки у меня есть это:

// GET PARAMS -- This basically splits domain.com/kohana/controller/action/param1/etc 
// into: controller | action | param1 | etc 
$requestURI = explode('/', $_SERVER['REQUEST_URI']); 
$scriptName = explode('/',$_SERVER['SCRIPT_NAME']); 

    for($i= 0;$i < sizeof($scriptName);$i++){ 
     if ($requestURI[$i] == $scriptName[$i]){ 
     unset($requestURI[$i]); 
     } 
    } 

    $param = array_values($requestURI); 
    $controller = @ $param[0]; 
    $action = @ $param[1]; 
    $param1 = @ $param[2]; 
    $param2 = @ $param[3]; 
    $param3 = @ $param[4]; 
    $param4 = @ $param[5]; 
    $param5 = @ $param[6]; 
    $param6 = @ $param[7]; 

Теперь я хочу, чтобы подключиться к базе данных и в основном увидеть, если первые пары ака $ пары [0] ака $ контроллер равно на одну из моих страниц «категории» (соответствует моей таблице category_pages). Если это категория, то я хочу использовать контроллер «категории» по умолчанию, иначе контроллер должен быть любым параметром $ param [0]. Это означает, что если я перейду на сайт domain.com/kohana/movies или domain.com/kohana/games, он отобразит контроллер категорий, иначе domain.com/kohana/users отобразит пользовательский контроллер.

$db = Database::instance(); 
$getiscategory = DB::select('*')->from('categories_pages')->where('directory', '=', $controller)->execute(); 
$is_category = $getiscategory->count(); 

if($is_category){ 
$controller = "categories"; 
} 

    $controller = (empty($controller)) ? 'index' : $controller; 
    $action = (empty($action)) ? 'index' : $action;  

Что я хотел выполнить над работами. Если я echo $ is_category, я вижу, что значение 1 возвращается, когда есть соответствие категории, и если я эхо-контроллер $, я вижу, что в «категориях» установлен контроллер.

Вот мой код для фактического метода маршрутизации ...

Route::set(
    'custom', 
    '(<controller>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>)))))))' 
    )->defaults(array(
    'controller' => $controller, 
    'action'  => $action, 
    'param1'  => $param1, 
    'param2'  => $param2, 
    'param3'  => $param3, 
    'param4'  => $param4, 
    'param5'  => $param5, 
    'param6'  => $param6, 
)); 

К сожалению, я не знаю, где это маршрутизации. Как я уже упоминал, $ controller возвращается ранее как категории, которые являются правильными, но все же я получаю сообщение об ошибке «HTTP_Exception_404 [404]: запрошенный URL $ param [0] (фильмы или игры и т. Д.) Не найден на этом сервере».

Имейте в виду, что у меня нет класса контроллера для $ param [0], если он соответствует категории, потому что я хочу использовать класс контроллеров категорий. Если я перейду в domain.com/kohana/categories, он отлично работает.

У кого-нибудь есть идеи/знать обход?

Дополнение # 1

я понял, что даже если контроллер категории называется и правильное действие называется, он по-прежнему требуя «показывает» контроллер для отображения. Я добавил контроллер шоу с самой базовой информацией (шаблоном, контентом и т. Д.), И он показал правильно. Есть ли работа в классе маршрутизации, чтобы показать назначенный контроллер? Как я уже сказал, я говорю, что контроллер должен пойти, и он это признает, но на самом деле он не подходит.

+0

Прошу простить это, но я думаю, что вы полностью отключены от кода в своем бутстрапе. Причина, по которой вы используете фреймворк, не должна делать такие вещи. Вы можете получить все сегменты маршрута (или params) с помощью '$ this-> request-> param()' в вашем действии. http://kohanaframework.org/3.2/guide/kohana/routing # request-parameters И для вашей реальной проблемы с маршрутизацией прочтите документацию больше и ответ от Lethargy. Вы можете указать маршрут без '' в своем URI и установить контроллер по умолчанию в 'defaults()'. –

ответ

1

Вы, кажется, слишком оскорбительные вещи. Также ваш код заставит предел 6 параметров по каждому запросу.

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

Route::set(
    'categories', 
    '(<category>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>)))))))', 
    array('category' => '(movies|games)') 
    )->defaults(array(
     'controller' => 'category', 
     'action'  => 'index', 
)); 
Route::set(
    'users', 
    '<username>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>))))))' 
    )->defaults(array(
     'controller' => 'users', 
     'action'  => 'index', 
)); 

Если у вас есть только один или два категории, которые вы могли бы построить их в регулярное выражение строки, с некоторыми кэширования конечно.

В противном случае, look up lambda routes, это средства, с помощью которых вы можете иметь динамические маршруты, подобные этому.

+0

обязательно прочтите дополнение # 1 выше. – bowlerae

Смежные вопросы