Jet*_*rst 1 php frameworks helper psr-4
我正在尝试实现一个辅助函数,它可以帮助我在 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']);
Run Code Online (Sandbox Code Playgroud)
我的“路线”文件中有一条路线,我的路线如下所示。
$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)
我更愿意像这样简单地将根添加到我的文件中......
route('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)
所以我需要做一个辅助函数
问题
感谢 psr-4 自动加载,我知道如何在需要时提取类,但是当涉及到平面旧函数时,这一点不太清楚。如何将辅助函数干净地添加到 MVC 框架中,而无需到处添加 require 文件?
非常感谢您的时间和考虑!
要使辅助函数全局可用,您必须将它们包含在全局范围内。执行此操作的一种方法是在应用程序入口点(通常index.php)中,您需要具有辅助函数的文件。
例如,Laravel 就是这样做的,并且有各种各样的帮助器: https: //laravel.com/docs/5.1/helpers
每当我出于学习目的编写自己的框架时,我发现我喜欢将我的助手分成功能区域,所以我倾向于做的是为助手创建一个文件夹,类似于并/app/helpers在我的文件中使用一些类似的代码入口点:
foreach (glob("./app/helpers/*.php") as $helper) {
require_once($helper);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这会污染全局名称空间,因此请务必仔细考虑您的命名约定。
另一种方法是创建一个Helper类并在其中静态提供可用的方法,这样您就可以调用诸如此类的东西Helper::route(),并且它将函数保留在全局命名空间之外。