0

フレームワークを使用せずに、MVC アーキテクチャで Web サイトを作成したいと考えています。Files/Folder構造 ( Module/Views/Models )はどうなるでしょうか。

編集: Zend、CakePHP を知っています。しかし、私の質問は、 Simple PHPでどのように構造化できるかです。最大のパフォーマンス/速度が必要なため、どのフレームワークも使用したくありません。フレームワークは単純な PHP Web アプリケーションに比べて遅いと聞いたので、単純な PHP を 選択しました。

編集 2: すべての Web ページを index.php 経由で呼び出すようにしたいのですが、

4

7 に答える 7

2

次のような構造にすることができます。

  root folder/
     index.php
     views/
     models/
     controllers/
     util/

index.php はフロント ローダーです。すべての URL がこれを通過し、URL に基づいてどのコントローラーを呼び出すかを決定します。mod_rewrite を使用して URL から index.php を削除できます。

views/ フォルダーには、html、rss、xml などのビュー ファイルが含まれています。コントローラーからこれらの値を入力します。ここで Smarty を使用することもできますが、率直に言って、要点がわかりません。

models/ フォルダーには、ORM または DB 接続コードが含まれます。モデルはゼロから簡単に作成できます。

controllers/ フォルダーには、URL ごとに 1 つのコントローラー ファイルが含まれます。たとえば、本を扱うための CRUD URL は books.php です。各コントローラーはモデルをロードし、データを使用してビューを設定する必要があります。

util/ フォルダーには、モデルまたはコントローラーではない任意のクラスを保持できます。セキュリティ、セッション管理などのヘルパー。

あなたが自分で書いているのを見ると、下品なことをやめてシンプルに保つことができます。しかし、実際にはあなたが思っているよりも大きな仕事であることに気付くかもしれません。使いたくないのはわかりますが、Code Igniter は物事を非常にシンプルに保ち、軽量で、Cake や Symfony のような他のフレームワークほど多くのことをしようとはしません。

于 2009-09-18T08:40:04.023 に答える
1

PHPの最初の作成者は、この種のことについての良い記事を投稿しています。

http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

于 2009-09-20T01:59:19.663 に答える
0

ユーザーメダーが提案したように、非常に単純なmvcフレームワークweb2bbを試してください。PHP 5.2用に拡張および最適化された、私の移植版もあります。ここでsvnを介してそのソースコードにアクセスできます:

Googleコードweb2bb-php52

ソースにはBLOGサンプルアプリケーションが埋め込まれています。

于 2009-09-20T02:01:53.433 に答える
0

私は、最もシンプルなVCプラットフォームになるように注意を払っています。

コメントからメタデータを引き出す単純なCファイルがあり、JavaScript(サーバー側)を使用して、ファイルをリンクする関数とともにURLルーターを構築します。それは非常にシンプルで、オブジェクト指向の奇妙さなしにプログラミングを簡単にします。

私はMを持っていないことに注意してください。私は自分の言語でモデルの側面を実行しますが、一般に、テーブルを取得する関数とRPC呼び出しとして機能する関数のセットになります。キラを使っています。

于 2009-09-20T01:51:01.350 に答える
0

http://github.com/jaywilliams/WEB2BB/tree/master/application/

Web2BBのフォーク

于 2009-09-20T01:53:36.400 に答える
0

私はsymfonyのツリー構造 が本当に好きですhttp://andreiabohner.files.wordpress.com/2007/03/cheatsheetsymfony001_enus.pdf

編集に関しては、symfony を使用しないように、symfony のディレクトリ構造 (または必要に応じてそのサブセット) をお勧めします。

フレームワークのパフォーマンスに関しては、依存します。優れたフレームワークは問題を認識しており、キャッシングやその他の最適化手法を使用しています。apache の代わりに軽量の http サーバーを使用すると、別の問題が発生する可能性があります。しかし、すべてはあなたの特定のニーズに依存します。

于 2009-09-18T08:31:54.700 に答える
0

Zend Framework を使用する前は、似たようなことをしていました。

ファイル/フォルダー構造は次のとおりです。

/
/views
/layouts
/controllers
/library
/etc
/data
Site.php
index.php

Views : コントローラー/アクションごとに 1 つずつ、すべてのテンプレートが含まれています

Layouts : (ビューから) 含めるファイル名を含む var を取得するレイアウト

コントローラー : コントローラー

library : プロジェクトに必要なすべての追加ツール

etc : ドキュメントなど

data : ファイルのアップロード用

プロジェクト全体を初期化するために使用される Site.php ファイル。index.php によって呼び出されるブートストラップのようなものです。

index.php : ブートストラップを呼び出します

<?php
class Site
{
    protected $_action = NULL;
    protected $_contentFile = NULL;
    protected $_args = array();
    protected $_headTitle = NULL;
    protected $_headerStack = array();

    public function __construct ($action)
    {
        $this->setAction($action);
        $this->setArgs();
    }


    public function setHeader($name = null, $value = null)
    {
        if (null != $name && null != $value)
        {
            $this->_headerStack[$name] = $value;
        }
    }

    public function sendHeaders()
    {
        if (null != $this->_headerStack)
        {
            foreach ($this->_headerStack as $key => $value)
            {
                header($key . ':' . ' ' . $value);
            }
        }
        return $this;
    }



    public function setAction($action)
    {
        $this->_action = (! empty($action) ) ? $action : 'error';
        return $this;
    }

    public function setArgs()
    {
        $this->_args['GET'] = $_GET;
        $this->_args['POST'] = $_POST;
    }

    public function getParam($name)
    {
        if ( ! empty($this->_args['GET'][$name]))
        {
            return $this->_args['GET'][$name];
        } else {
            return null;
        }
    }

    public function getParams()
    {
        return $this->_args['GET'];
    }

    public function getPost()
    {
        return $this->_args['POST'];
    }

    public function preRun()
    {
        if (is_file('views/' . $this->_action . '.phtml'))
        {
            $content = 'views/' . $this->_action . '.phtml';
            $this->setContentFile($content);
        }

        if (is_file('library/' . ucfirst($this->_action) . 'Action.php'))
        {
            require_once 'library/' . ucfirst($this->_action) . 'Action.php';
            if (function_exists  ('init')) 
            {
                init();
            }
        }
    }


    public function run()
    {
            $this->sendHeaders();
            $this->preRun();
            require_once 'layouts/main.phtml';
            $this->sendHeaders();
    }

    public function setContentFile($content)
    {
        $this->_contentFile = ( !empty($content) ) ? $content : '';
        return $this;
    }

    public function getContent()
    {
        require_once $this->_contentFile;
    }

    public function setHeadTitle($title)
    {
        $this->_headTitle = $title;
        return $this;
    }

    public function getHeadTitle()
    {
        return $this->_headTitle;
    }

}

次に、インデックスで次のことを行いました。

$action = $_GET['action'];

$site = new Site($action);

$site->run();

便宜上、余分なセキュリティチェックをいくつか削除しました...

次に、これを拡張して、コントローラーなどから呼び出されるモデルディレクトリを含めることができます...

于 2009-09-18T08:59:26.653 に答える