我现在正在抨击Phalcon,试图让我了解它,因为我正在考虑将一个大项目从CodeIgniter移植到Phalcon或其他框架,然后继续开发.
我正在使用路由器尝试捕获404错误,但这不能按预期工作.路由器它自己似乎正在工作,因为我还必须$router->add("/"获取站点索引控制器,如果index.php没有定义,如果我评论出来,回家/然后抛出404!但是,键入一些不存在的控制器名称,例如test,给出错误"PhalconException:TestController处理程序类无法加载".我的htaccess是根据Phalcon docs教程.
在bootstrap(index.php)中我有;
$di->set('router', function() {
require __DIR__ . '/../app/config/routes.php';
return $router;
});
而我的routes.php看起来像这样;
$router = new \Phalcon\Mvc\Router();
// default
$router->add("/", array(
'controller' => 'index',
'action' => 'index'
));
//Set 404 paths
$router->notFound(array(
"controller" => "group",
"action" => "index"
));
$router->handle();
return $router;
Run Code Online (Sandbox Code Playgroud)
该站点具有domain.com/group-name/到达的用户提交的组.在CI中,我使用404路由加载组控制器,该组控制器将激活对该组的搜索.如果找到它将显示该组,如果没有它将抛出404页面与404标题.很可能在Phalcon中有更好的方法,但我至少想知道为什么我的notFound溃败无法工作;)
编辑:不确定这是否会改变,但我使用的是基本控制器"controllerBase",所有主控制器都在扩展.它只包含一些变量和初始化函数以及可以从控制器调用的另一个函数.我不会想到这会影响notFound路由,但我想我最好提一下.
当我输入url时:
http://localhost/asdfasdfasdcxccarf
Phalcon给了我这样的信息:
PhalconException: AsdfasdfasdcxccarfController handler class cannot be loaded
这是合乎逻辑的,因为这个控制器不存在.
但是,如何让Phalcon将每个没有控制器的坏URL重定向到我的默认控制器IndexController?
因此,我一直在阅读大量的stackoverflow和phalcon论坛线程。(我开始讨厌这个框架),但是似乎没有任何效果,例如,它不能解释为什么像Laravel这样工作。
我只是想能够使用此应用程序结构进行操作:

如您所见,我想要的只是在子文件夹中使用命名空间控制器来为我的代码设置更多顺序。
根据所有解释,这是我的loader.php:
<?php
$loader = new \Phalcon\Loader();
/**
* We're a registering a set of directories taken from the configuration file
*/
$loader->registerDirs(
array(
$config->application->controllersDir,
$config->application->modelsDir,
$config->application->pluginsDir
)
)->register();
Run Code Online (Sandbox Code Playgroud)
AFAIK,当通过registerDirs使用时,Phalcon应该遍历所有未找到类的子文件夹。
然后,在基本目录中指向索引控制器的主要路由之后,定义到特定控制器的路由:
<?php
$router = new Phalcon\Mvc\Router(false);
$router->add('/:controller/:action/:params', array(
'namespace' => 'App\Controllers',
'controller' => 1,
'action' => 2,
'params' => 3,
));
$router->add('/:controller', array(
'namespace' => 'App\Controllers',
'controller' => 1
));
$router->add('/soccer/soccer/:controller', array(
'namespace' => 'App\Controllers\Soccer',
'controller' => 1
));
$router->add('/soccer/:controller/:action/:params', array(
'namespace' => 'App\Controllers\Soccer',
'controller' => 1,
'action' …Run Code Online (Sandbox Code Playgroud) 如何在PhalconPHP中设置默认控制器和默认操作?
我使用此代码没有成功:
$di->set('router', function () {
$router = new \Phalcon\Mvc\Router();
$router->notFound(['controller' => 'Index', 'action'=> 'index']);
$router->setDefaultController('Bookmarks');
$router->setDefaultAction('index');
return $router;
});
Run Code Online (Sandbox Code Playgroud)