CakePHP: маршрут с необязательными параметрамиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 CakePHP: маршрут с необязательными параметрами

Сообщение Anonymous »

Предположим, что у меня есть это действие:

Код: Выделить всё

public function index_by_date($year = NULL, $month = NULL, $day = NULL) {
if($year && $month && $day) {
//Posts of day
}
elseif($year && $month) {
//Posts of month
}
elseif($year) {
//Posts of year
}
else {
//Exception...
}
}
Здесь показаны публикации за один день (все публикации от 11.06.2016):

Код: Выделить всё

mysite.com/posts/2016/06/11
Это сообщение за полный месяц (все сообщения за июнь 2016 г.):

Код: Выделить всё

mysite.com/posts/2016/06
Это сообщение за весь год (все сообщения за 2016 год):

Код: Выделить всё

mysite.com/posts/2016
Думаю, это понятно.

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

Я пробовал что-то подобное, но это не работает:

Код: Выделить всё

$routes->connect('/posts/:year/:month/:day',
['controller' => 'Posts', 'action' => 'index_by_date'],
[
'year'  => '[12][0-9]{3}',
'month' => '(0[1-9]|1[012])?',
'day'   => '(0[1-9]|[12][0-9]|3[01])?',
'pass'  => ['year', 'month', 'day']
]
);
Как это сделать?



РЕДАКТИРОВАТЬ
На данный момент это лучшее, что я мог сделать:

Маршрут:

Код: Выделить всё

$routes->connect('/posts/:date',
['controller' => 'Posts', 'action' => 'index_by_date'],
[
'date' => '\d{4}(\/\d{2}(\/\d{2})?)?',
'pass' => ['date']
]
);
Действие:

Код: Выделить всё

public function index_by_date($date = NULL) {
list($year, $month, $day) = array_merge(explode('/', $date), [NULL, NULL, NULL]);

if($year && $month && $day) {
//Posts of day
}
elseif($year && $month) {
//Posts of month
}
elseif($year) {
//Posts of year
}
else {
//Exception...
}
}
Есть ли лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/377 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»