0

このアプリケーションでは、コントローラーとビューを使用して、ユーザーに電子メールで送信できる PDF ファイルを生成します。コントローラーはビュー ファイルをレンダリングし、それをモデルに返します。

このように設定されているのは、アプリケーションの別の部分で同じビュー ファイルを使用してページ上に PDF を表示するためです (これには POST データが必要です)。

私の問題は、モデルからコントローラー関数にアクセスできるようにする必要があることですが、誰かが (Web サイトを直接使用して) コントローラー関数を直接実行できないようにしたいです。

モデル内:

$Contents = new ContentsController();
$message = $Contents->generatePDF($viewVars);

コントローラーで:

public function generatePDF($input_data)
{

    //set the original data and the check result to build the page:
    foreach($input_data as $key => $value)
    {
        $this->set($key, $value);
    }

    //instantiate a new View class from the controller
    $view = new View($this);

    $viewData = $view->render('pdf_file', 'pdf');

    return $viewData;
}

これは機能しますが、ユーザーがブラウザーに /Contents/generatePDF と入力すると、このコントローラー機能にアクセスできるため、Web から直接アクセスできないようにしたいと考えています。

CakePHP 2.X を使用しています

4

1 に答える 1

2

最も簡単な方法は、コントローラー メソッドの名前の前にアンダースコアを追加することです: _generatePDF. このようなメソッドには、ブラウザからアクセスできません。

于 2013-03-21T07:45:49.877 に答える