我正在尝试实施一个辅助功能,这有助于我添加'添加' MVC应用程序中的路由(映射到控制器/操作)。
我的index.php文件看起来像这样。
// use block
use App\Router;
use App\Config;
use App\Core\Database;
use App\Bootstrap;
// dependencies
$router = new Router;
$config = new Config;
$database = new Database($config);
$bootstrap = new Bootstrap($router, $database);
// routes
require '../App/Routes.php';
$bootstrap->router->dispatch($_SERVER['QUERY_STRING']);
我的路线'文件中有一条路线,我的路线看起来像这样。
$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
我宁愿简单地将root添加到我的文件中......
route('/home', ['controller' => 'home', 'action' => 'index']);
所以我需要做一个辅助函数
问题
感谢psr-4自动加载,我知道如何在需要的时候引入类,但是 这对于平面旧函数 来说不太清楚。如何在不向所有地方添加require文件的情况下将我的帮助函数干净地添加到我的MVC框架中?
非常感谢您的时间和考虑!
答案 0 :(得分:4)
要在全局范围内使用辅助功能,您必须全局包含它们。一种方法是在您的应用程序入口点(通常为index.php
),您需要具有辅助函数的文件。
每当我为学习目的编写自己的框架时,我发现我喜欢将我的帮助器分成功能区域,所以我倾向于使用帮助文件夹,例如/app/helpers
和使用在我的切入点中有一些这样的代码:
foreach (glob("./app/helpers/*.php") as $helper) {
require_once($helper);
}
请注意,这会污染全局命名空间,因此请务必仔细考虑您的命名约定。
另一种方法是创建一个Helper
类,并在其中静态提供方法,以便您可以调用Helper::route()
之类的内容,并将函数保留在全局名称空间之外。
答案 1 :(得分:1)
如此处Autoloader for functions所述,您有几个选项,因为没有自动加载功能。
如果您使用composer来管理依赖项,则可以将所有函数放在一个文件中,并将"files"
指令添加到"autoload"
文件的composer.json
部分。这将导致作曲家在其生成的自动加载器中为您执行脏工作。
除此之外,您可以将包含函数的文件的require_once
放入到框架的index.php中,然后就可以了。
您甚至可以使用所有功能,将它们组合成一个类作为静态方法,然后使用Libraryname::functionname()
简单地调用它们,然后当您使用它时,自动加载器将为您处理所有事情,就像任何其他课程。
总结一下,没有自动加载器,但有许多好的,可靠的,干净的选项可以让这项工作。