0

MVC がどのように機能するかを学習する手段として、PHP で基本的な MVC 構造化 CMS を作成しています (したがって、実際に事前に構築されたエンジンを使用していません)。基本的なバージョンが機能しており、現在、次のように情報を構成ファイルに移行しようとしています。

config.php

 <?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 ファイルに含めています。

index.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;
};

また、セッション管理とルーティング メカニズムの処理にも同様の原則を適用できます。

そして、これは一体何ですか?

'ignore' => array(E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED),

コードの品質に関連する警告を無視するのはなぜですか? それはただ愚かです。

于 2012-07-25T05:22:16.747 に答える