Задать вопрос
t-alexashka
@t-alexashka
Сразу пишу legacy код

Phalcon маршрутизация?

Учу Phalcon, и сразу же возник вопрос-проблемка с роутингом.

хочу чтобы по урлу:

/product/{id}-{title}

шло обращение к методу showAction у ProductController с передачей туда id и title, который будет выгружать из базы продукт с id={id}

например

site.ru/product/1022-notebook-samsung-gs5411-white

id = 1022
title = notebook-samsung-gs5411-white

но проблема в следующем. роутинг работает как /controller/action и ему все равно на мои {id}

пробовал вообще выключить роутинг, все равно работает по стандартному методу. Может я его неправильно объявляю?

подскажите что не так делаю?

ProductController:

<?php

	class ProductController extends \Phalcon\Mvc\Controller
	{
		
		public function indexAction()
		{
			
			echo "Главная страница продуктов";
			
		}
		
		/**
		*	Страница одного продукта
		*/
		public function showAction()
		{
			$pid = $this->dispatcher->getParam("pid");
			$name = $this->dispatcher->getParam("title");
			
			echo "Страница продукта $pid ($title)"; 
			
		}
		
	}


И собственно сам роутинг:

...
	$router = new \Phalcon\Mvc\Router();
	
	$router->add(
    "/product/",
		array(
			"controller" => 'product',
			"action"     => 'index',
		)
	);
	
	$router->add(
    "/product/{id}-{title}",
		array(
			"controller" => "product",
			"action"     => "show",
		)
	);

	$router->handle();
...


запрос к урлу
/product/13
выдает:
PhalconException: Action '13' was not found on handler 'product'
  • Вопрос задан
  • 997 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
StranikS
@StranikS
web разработчик
Внимательно прочти документацию по роутингу
docs.phalconphp.ru/ru/latest/reference/routing.html
Прочтя сразу поймешь, что неправильно формируешь правило маршрутизации, следовательно он неверно обрабатывается
Ответ написан
Комментировать
t-alexashka
@t-alexashka Автор вопроса
Сразу пишу legacy код
нет, с правилами у меня все правильно было. просто роутинг нужно было обернуть в DI оболочку:

$di->set('router', function () {

		$router = new \Phalcon\Mvc\Router(false);
		
// маршруты...

		return $router;
});
Ответ написан
Комментировать
abler98
@abler98
Software Engineer
$router->add(
	'/product/:int\-([\w\d_-]+)',
	[
		'controller' => 'product',
		'action' => 'show',
		'id' => 1,
		'title' => 2,
	]
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы