0

レイアウトを使用している作業中の zend mvc アプリケーションがあり、このレイアウトは外部のスタイルシートとスクリプトを使用しています。サイト内の各ページには独自のコントローラーがあり、各ページのページ固有のコンテンツは index.phtml ファイルにあります。レイアウトが機能し、すべてのスクリプト/スタイルシートが各コントローラーの index.phtml に適切に適用されます。

たとえば、ホームページは「mvcProject/」であり、インデックス コントローラに対応する index.phtml ファイルを使用するインデックス コントローラのインデックス アクションを呼び出します。さらに、about us ページは「mvcProject/about」で、about コントローラーを呼び出し、views/about/index.phtml を表示します。主観的には、この構造は効率が悪いと感じました。このサイトのコンテンツは html だけで、各ページに独自のコントローラーが必要な理由がわかりません。

したがって、単一のインデックス コントローラー内で各ページに独自のアクションを与えることで、同じ目的、つまり同じアーキテクチャを実現するために、コントローラーを 1 つだけ使用するようにしました。これで、"about us" ページは "mvcProject/index/about" になりました。これにより、インデックス コントローラーは、views/index/about.phtml ファイルを使用する about アクションを呼び出します。

このアプローチにより、レイアウト内の外部スクリプト/スタイルシートへのリンクがすべて壊れました。レイアウトは引き続き機能しましたが、リンクのパスはどれも機能しませんでした。明らかに、これはパス関連の問題ですが、私はまだ zend に比較的慣れていないため、これを修正する方法がわかりませんでした。したがって、私は戻って、各ページに独自のコントローラーを再び与えました。

したがって、私の質問は 2 つあります。各ページに独自のコントローラーを与えることによる肥大化を避けることに気を配る必要がありますか? また、この構造をスリム化する必要がある場合、リンクのパスを修正するために何を調整する必要がありますか? ご検討いただきありがとうございます。

4

2 に答える 2

1

フレームワーク/コントローラーの数に関する議論を無視することは、現時点ではやり過ぎです。スクリプト/CSS が失敗する理由は、実際にはパスの問題です。レイアウト ヘルパーを使用している場合は、ビュー内で headLink および headScript オブジェクトを使用する必要があります。

これは、開発中に必要なスクリプトと css ファイルを設定するための私の好みの方法です。

Bootstrap.php

protected function _initView()
{
    // Initalise the view
    $view = new Zend_View();
    $view->doctype('HTML5');

    // Get config options for the UI
    $ui = $this->getApplication()->getOption('ui');

    $view->headTitle($ui['title']);

    foreach ($ui['stylesheet'] as $stylesheet) {
        $view->headLink()->appendStylesheet($stylesheet);
    }

    foreach ($ui['script'] as $script) {
        $view->headScript()->appendFile($script);
    }

    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
    );
    $viewRenderer->setView($view);

    return $view;
}

configs/application.ini

ui.title = "My Awesome Web App"
ui.stylesheet[] = "/extjs/resources/css/ext-all.css"
ui.stylesheet[] = "/resources/css/hod.css"
ui.stylesheet[] = "/resources/css/icons.css"
ui.stylesheet[] = "/resources/bootstrap/css/bootstrap.css"
ui.script[] = "extjs/ext-debug.js"
ui.script[] = "app.js"

レイアウト/default.phtml

<?php echo $this->doctype(); ?>
<html>
<head>
    <?php
    echo $this->headTitle();
    echo $this->headMeta();
    echo $this->headStyle();
    echo $this->headScript();
    echo $this->headLink();
    ?>
</head>

<body>
    <?php echo $this->layout()->content; ?>
</body>
</html>

これにより、必要なすべてのスクリプトを開発モードでセットアップし、本番環境で縮小されたスクリプトをすべて設定で設定でき、追加のコードを記述する必要はありません。

やり過ぎの質問に戻ります。データベースへの接続やアプリ内のすべての機能がなくても、フレームワークを使用することは、メンテナンスの観点からは依然として最良のアプローチだと思います (フレームワークの速度に慣れたら)。 ) 5 ページまたは 6 ページを超える場合。Web サイトで膨大な量のトラフィックが発生し、すべてのバイトまたはミリ秒がカウントされる場合を除き、フレームワークによって追加されるわずかなオーバーヘッドのために保守性を低下させる意味がわかりません。

同じロジックがコントローラーにも当てはまります。仕事の機能を明確に分割するのに役立つのに、なぜそれらの数を減らしたいのかわかりません。さらに、ルーターを変更しない限り、site.com/index/about は site.com/about よりも醜く見えます :)

于 2012-04-03T23:28:21.663 に答える
0

ビューでパスと URL がどのように作成されているかわかりませんが、 baseUrl ヘルパーを使用していますか? $this->baseUrl( [ファイル] )

于 2012-04-04T08:34:12.837 に答える