2

多くの人が知っているように、PHPフレームワークはたくさんありますが、これについてのあなたの考えに興味があります。ZendFrameworkには、少なくとも1つのアクションメソッド(名前が「Action」で終わるメソッド)を含まなければならない、いわゆるアクションコントローラーがあります。 。例えば:

public function indexAction() {}

「アクション」という言葉は重要です。それがないと、URIを介してメソッドに直接アクセスすることはできません。ただし、Kohanaのような他のフレームワークでは、パブリックメソッドとプライベートメソッドがありますが、パブリックメソッドにはアクセスでき、プライベートメソッドにはアクセスできません。だから私の質問は、どちらがより良いアプローチだと思いますか?安全な観点から、私はZendのアプローチに投票しますが、他の人がどう思うかを知りたいと思っています。

4

5 に答える 5

1

本当に好みです。ある種の命名規則を使用すると、アクションではないパブリックメソッドが可能になるため、より用途が広くなります(これは、Kohana 3が現在行っていることです)。これは便利です。

もちろん、理想的な解決策は、.NETの属性Javaの注釈など、ある種のコードメタデータを使用することですが、残念ながら、この機能はPHPには存在しません。

于 2010-04-18T10:58:45.643 に答える
1

好みに基づいて、私はzendフレームワークのアプローチに長けています。適切なコントローラーカプセル化があります。はい、アクションという単語を追加し、URL経由でアクセスするためのビュースクリプト(オプション)を作成する必要があります。それでも、追加のロジックのために、コントローラー内のプライベート、保護、およびパブリック関数を使用することができます。

于 2010-04-19T04:58:36.627 に答える
1

これは、ZFの設計よりもセキュリティとは関係がありません。あなたが言ったように、URLを介して呼び出された場合、メソッドにはアクセスできませんが、それはZendFrameworkがリクエストを処理する方法にのみ起因します。

リファレンスガイドの引用:

のワークフローZend_Controllerは比較的単純です。によって要求が受信されZend_Controller_Front、次に、Zend_Controller_Router_Rewrite どのコントローラー(およびそのコントローラー内のアクション)をディスパッチするかを決定するために呼び出します。

Zend_Controller_Router_Rewriteリクエストにコントローラーとアクションの名前を設定するために、URIを分解します。Zend_Controller_Front次に、ディスパッチループに入ります。要求を呼び出しZend_Controller_Dispatcher_Standardて、要求で指定されたコントローラーとアクションにディスパッチします(またはデフォルトを使用します)。

メソッド名は次の形式でフォーマットされZend_Controller_Dispatcher_Abstractます:

/**
 * Formats a string into an action name.  This is used to take a raw
 * action name, such as one that would be stored inside a Zend_Controller_Request_Abstract
 * object, and reformat into a proper method name that would be found
 * inside a class extending Zend_Controller_Action.
 *
 * @param string $unformatted
 * @return string
 */
public function formatActionName($unformatted)
{
    $formatted = $this->_formatName($unformatted, true);
    return strtolower(substr($formatted, 0, 1)) . substr($formatted, 1) . 'Action';
}

Actionサフィックスはハードコーディングされているため、Dispatcherは常にActionメソッドを探します。したがって、リクエストするときは、リクエストの処理方法のために/user/show/電話をかけます。UserController::showAction()ただし、これはセキュリティ機能ではなく、Visibilityに代わるものでもありません。保護showAction()すると、URLを介してアクセスできなくなります。また、技術的には、通常のセットアップでも実行しない場合は、URIから非アクションメソッドを呼び出すことができます。独自のディスパッチャを作成し、ZFがアクション名を簡単にフォーマットする方法を変更できます。

アクションサフィックスの優れている点は、アクションメソッドをコントローラー内の他のメソッドと明確に区​​別できることです。

于 2010-04-19T07:34:29.343 に答える
0

PHP 4にはプライベート/パブリックがなかったため、Zendにはこれがあり、命名規則に依存する必要がありました。パブリック/プライベートと命名規則の両方を実際に持つ方がより安全です。

于 2010-04-18T10:45:39.430 に答える
0

個人的な好み次第だと思います。ここには多くのバリエーションがあります。たとえば、codeigniterのバージョンでは、_で始まるメソッド名はすべてプライベートであり、それ以外はコントローラーメソッドです。

個人的に言えば、組み込みの言語コントロール(public functionvsprivate functionなど)を使用するものが最も直感的だと思います。

編集:率直に言って、MOST SECUREメソッドは、可能な限り多くの機能(privateメソッド名など)を使用するメソッドになります。

于 2010-04-18T10:46:11.623 に答える