我有一个用PHP Phalcon制作的网站,它有几个控制器。
现在我需要这个网站接收URL中的文字(example.com/WORD)并检查它们是否存在于数据库中,但我必须继续支持其他控制器,例如example.com/aboutme。
经过几个小时尝试不同的方法并在线搜索,我找不到完成此任务的方法。更接近的意图是创建一个Route,将不存在的操作重定向到新的控制器,但我不能使这个解决方案有效。
你能想到一个可行的解决方案并分享代码/想法吗?我没有添加任何代码,因为我无法做任何有用的事情。
答案 0 :(得分:1)
这应该不是问题。以下是示例路线:
// Default - This serves as multipurpose route definition
// I can use it to create non pretty urls if I don't want to define them.
// Example: profiles/login, profiles/register - Don't need those pretty :)
$router->add('/:controller/:action/:params', ['controller' => 1, 'action' => 2, 'params' => 3]);
$router->add('/:controller/:action', ['controller' => 1, 'action' => 2]);
$router->add('/:controller', ['controller' => 1]);
// Product page - www.example.com/product-slug-here
$router->add('/{slug}', 'Products::view')->setName('product');
// Blog
$router->add('/blog/{slug}', 'Blog::view')->setName('blog');
$router->add('/blog', 'Blog::index')->setName('blog-short');
// Contacts - Pretty urls in native website language
$router->add('/kontakti', 'Blabla::contacts')->setName('contats');
答案 1 :(得分:0)
毕竟,规则没有奏效,所以我提出了一个解决方法。我正在捕获当控制器不存在并在那里运行我的代码时引发的异常。到目前为止,唯一的问题是对意大利面条代码做出贡献的苦涩味道: - (
try{
$application = new Application($di);
echo $application->handle()->getContent();
}
catch(\Phalcon\Mvc\Dispatcher\Exception $e)
{
$word = substr($e->getMessage(), 0, strpos($e->getMessage(), "Controller"));
// RUN ESPECIFIC CODE HERE
}