2015-02-27 3 views
0

После того, как я думал, это проблема с $this->uri->segment(), я понял, что это проблема маршрутизации. Проблема в том, что я не могу понять, что не так, поскольку он выглядит точно так же, как другой маршрут, который я использую, который отлично работает, за исключением того, что у него есть два сегмента переменных, а не один (для маршрута, который работает).CodeIgniter - Проблемы с маршрутизации (четыре сегмента)

Файл Я пытаюсь показать расположен в:

[основной папке] /application/views/tasks/calendar/calendar.php

И я могу загрузить его с команда:

$route['tasks/calendar'] = 'tasks/calendar'; 

Однако, когда я хочу, чтобы передать текущий год и месяц, как последние два сегмента, он не работает:

$route['tasks/calendar/(:num)/(:num)'] = 'tasks/calendar/$1/$2'; 

Насколько мне известно, это должно означать, что связь, как это должно работать:

(...)/index.php/задачи/календарь/2015/03

Однако , Это не. Полный routes.php выглядит следующим образом:

$route['auth/(:any)']     = 'auth/view/$1'; 
$route['auth']       = 'auth'; 
$route['projects/delete/(:any)']  = 'projects/delete/$1'; 
$route['projects/create']    = 'projects/create'; 
$route['projects/(:any)']    = 'projects/view/$1'; 
$route['projects']      = 'projects'; 
$route['(:any)']      = 'pages/view/$1'; 
$route['default_controller']   = 'pages/view'; 
$route['category']      = 'category'; 
$route['category/(:any)']    = 'category/view/$1'; 
$route['tasks/create']     = 'tasks/create'; 
$route['tasks/calendar/(:num)/(:num)'] = 'tasks/calendar/$1/$2'; 
$route['tasks/calendar']    = 'tasks/calendar'; 
$route['tasks']       = 'tasks'; 
$route['tasks/(:any)']     = 'tasks/view/$1'; 

И мой контроллер, tasks.php, выглядит следующим образом:

public function calendar($year = null, $month = null) { 
    // Calender configuration (must be done prior to loading the library 
    $conf = array(
      'start_day' => 'monday', 
      'show_next_prev' => true, 
      'next_prev_url' => base_url() . 'index.php/tasks/calendar' 
    ); 

    // Load libraries and helpers 
    $this->load->library('calendar',$conf); 

    // Set variables for $data array 
    $data['year'] = $year; 
    $data['month'] = $month; 

    // Show page, including header and footer 
    $this->load->view('templates/header', $data); 
    $this->load->view('tasks/calendar', $data); 
    $this->load->view('templates/footer'); 
} 

И очень простой вид файла, calendar.php, выглядит следующим образом:

<?php 
echo "Selected year: ".$year." and month: ".$month; 
echo $this->calendar->generate($year, $month); 

Какого черта я делаю неправильно ? Удаленные маршруты для проектов работает просто отлично ...

+0

Большинство ваших маршрутов, как 1 = 1. Вы ничего не делаете, устанавливая их так. – AdrienXL

+0

Уход за разработкой? Все мои другие маршруты работают, как получилось, если у них нет функции? – Noceo

+0

Конечно, они работают, поскольку они ничего не делают. Позвольте мне проиллюстрировать: '$ route ['auth'] = 'auth';' Средство перенаправляет любой URI, содержащий auth в сегменте, в auth-класс, т. Е. Tld/auth перенаправляет на .tld/auth. Idk, в чем ваша проблема, в первую очередь, но я не думаю, что причиной являются маршруты. – AdrienXL

ответ

2

Чтобы опираться на то, что только что сказали @Craig и @CodeGodie, вам нужно немного изменить порядок маршрутов.

$route['tasks']       = 'tasks/index'; 

// Initial route that will use $year=null, $month=null 
$route['tasks/calendar']    = 'tasks/calendar'; 

// This route will use whatever $year, $month the user provides 
$route['tasks/calendar/(:num)/(:num)'] = 'tasks/calendar/$1/$2'; 

Вы также можете установить допустимые значения $ year = null, $ month = null.

$today = getdate(); 

if(is_null($year) || is_null($month)){ 
    $year = $today['year']; 
    $month = $today['month'] 
} 
+0

Благодаря всем людям, комментирующим, проблема действительно была ** порядком ** определений маршрутизации, а не самих определений. Итак, это урок для других новичков CI, таких как я. Еще раз спасибо всем ... – Noceo

1

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

$route['(:any)']      = 'pages/view/$1'; 
$route['default_controller']   = 'pages/view' 

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

Ссылка: Codeigniter User Guide - URI Routing

Примечание:Маршруты будут работать в том порядке, они определены. Более высокие маршруты всегда будут иметь приоритет над более низкими.

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