0

我正在 PHP 中创建一个基本的 MVC 结构化 CMS,作为了解 MVC 工作原理的一种方式(因此我没有使用真正的预构建引擎)。我有一个基本版本,目前正在尝试将信息转移到配置文件中,如下所示:

配置文件

 <?php
    return array(
        //  MySQL database details
        'database' => array(
            'host' => 'localhost',
            'port' => '',
            'username' => '',
            'password' => '',
            'name' => '',
            'collation' => 'utf8_bin'
        ),

        // Application settings
        'application' => array(
            // url paths
            'default_controller' => 'index',
            'default_action' => 'index',
            'timezone' => 'UTC',
        ),

        // Session details
        'session' => array(
            'name' => '',
            'expire' => 3600,
            'path' => '/',
            'domain' => ''
        ),

        // Error handling
        'error' => array(
            'ignore' => array(E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED),
            'detail' => false,
            'log' => false
        )
    );

我将它包含在 index.php 文件中,如下所示:

索引.php

define ('__SITE_PATH', $site_path);
$config = include __SITE_PATH . '/config.php';

但是,当我稍后尝试将其加载到模板文件中进行测试时,或者与此相关的任何其他文件中,都不会返回任何内容。这是课程的问题吗?如果有人能对此事有所了解,我将不胜感激。

以下是完整的 index.php 以供参考:

<?php

    /*** error reporting on ***/
    error_reporting(E_ALL);

    /*** define the site path ***/
    $site_path = realpath(dirname(__FILE__));
    define ('__SITE_PATH', $site_path);

    $config = include __SITE_PATH . '/config.php';

    /*** include the controller class ***/
    include __SITE_PATH . '/application/' . 'controller_base.class.php';

    /*** include the registry class ***/
    include __SITE_PATH . '/application/' . 'registry.class.php';

    /*** include the router class ***/
    include __SITE_PATH . '/application/' . 'router.class.php';

    /*** include the template class ***/
    include __SITE_PATH . '/application/' . 'template.class.php';

    /*** auto load model classes ***/
    function __autoload($class_name) {
        $filename = strtolower($class_name) . '.class.php';
        $file = __SITE_PATH . '/model/' . $filename;
        if (file_exists($file) == false) {
            return false;
        }
        include ($file);
    }

    /*** a new registry object ***/
    $registry = new registry;

    /*** load the router ***/
    $registry->router = new router($registry);

    /*** set the controller path ***/
    $registry->router->setPath (__SITE_PATH . '/controller');

    /*** load up the template ***/
    $registry->template = new template($registry);

    /*** load the controller ***/
    $registry->router->loader();
4

1 回答 1

4

我认为你做这一切都是错的。

而不是创建复杂的配置,我发现在引导阶段初始化所有结构要容易得多,然后在需要的地方注入依赖项。

例如,为了代替数据库的连接配置,您创建了一个闭包,然后可以将其注入数据映射器工厂。

$dbhProvider = function()
{
    $instance = new \PDO('mysql:host=localhost;dbname=foobar;charset=UTF-8', 
                         'user', 
                         'password');
    $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    return $instance;
};

类似的原则可以应用于处理会话管理和路由机制。

到底是什么?

'忽略' => 数组(E_NOTICE,E_USER_NOTICE,E_DEPRECATED,E_USER_DEPRECATED),

为什么会忽略与代码质量相关的警告?那只是愚蠢的。

于 2012-07-25T05:22:16.747 回答