今回は、アクションとビューの作成について説明します。

リストの上にあるファイルが存在しない場合は作成するということを意味しています。

ただし、./symfony コマンドは OpenPNEのディレクトリ下で行う想定です。

おそらく、symfony使いのみなさんは、通常のアクションとビューについては
理解しているでしょう。

OpenPNEプラグインのappsフォルダ下でも同じように
アクションとビューを作っていくことができます。

アクションをまとめる

しかし、将来的に携帯版に対応し、アクションとしては同じ内容というのにも関わらず
pc_frontendアプリケーションと、mobile_frontendアプリケーションで、
別のアクションを作るというのは、あまり効率のいい方法と言えません。

そこで、手嶋屋の小川さんが開発している、opDiaryPluginを少し参考に考えてみます。

http://github.com/balibali/opDiaryPlugin

上記プラグインの、apps/pc_frontend/modules/diary/actions/actions.class.php
には、アクションは書いていません。
理由は、mobile_frontendと同じアクションを利用するためです。
では、アクションはどこにあるかというと、親クラスのopDiaryPluginDiaryActionsに
書かれています。
lib/actions/opDiaryPluginDiaryActions.class.phpで確認をすることができるでしょう。

もし、あなたが作成するプラグインが最終的に、PCにもモバイルにも同じような
機能を対応させるというのならば、このようにアクションをまとめるべきでしょう。
(また、コンポーネントについても同様といえます。)

ログインしていないメンバーに見えないページを作成する

SNSユーザの情報資源をSNS外部から不可視にするということは、
クローズドSNSを運営する人にとって重要な事項になるでしょう。

もし、特定のモジュール全体をログインしていない場合見えなくするには
security.ymlを設定するのがいいでしょう。

The symfony Reference Book – security.yml 設定ファイル

設定方法は、symfonyのそれと同じように、各モジュールのディレクトリに
config/security.yml を作成し、
そのモジュールのすべてのアクションに対して適用したい場合は、以下のように設定します。

all:
  is_secure: on
  credentials: SNSMember

credentialsにはログイン時に発行されるクレデンシャルであるSNSMemberを指定してください。
これにより、ログインされていない状態の場合、ログイン画面にリダイレクトされるようになります。

実際にやってみましょう

では、上で説明したことを実際にやってみます。

まず、actionをまとめましょう。
親にするクラス名はわかりやすくするため、また被らないようにするため(PHP5.3より前は名前空間がないのです)、プラグイン名モジュール名Actionというクラス名にするとよいでしょう。

前回作成したスケルトンに以下のファイルを新規作成・編集していきましょう。また、作成されていないディレクトリやファイルは適宜作成してください。

plugins/opVotePlugin/lib/action/opVotePluginVoteActions.class.php

<?php

class opVotePluginVoteActions extends sfActions
{
  // 動作テストに使うアクションです 次回以降バリバリ書いていきます。
  public function executeShow(sfWebRequest $request)
  {
  }
}

plugins/opVotePlugin/apps/pc_frontend/modules/vote/actions/actions.class.php

<?php
class voteActions extends opVotePluginVoteActions
{
}

テンプレートを作成します。テンプレートは各アプリケーションごとに作る必要があります。

plugins/opVotePlugin/apps/pc_frontend/modules/vote/templates/showSuccess.php

テストだよ

ここで、一度動作を見たいのですが、クラスの新規作成を行ったので、キャッシュをクリアします。

$ ./symfony cc

http://#セットアップしたSNSのURL#/vote/show
にアクセスして以下のようになっていれば成功です。

screenshot1

最後に、ログインメンバー以外見られないようにします。

plugins/opVotePlugin/apps/pc_frontend/modules/vote/config/security.yml

all:
  is_secure: on
  credentials: SNSMember

設定ファイルを変えたので、キャッシュクリアします。

$ ./symfony cc

先ほどと、同じURLにアクセスを試みるとログイン画面がでるはずです。
ログイン後は、以下のようなメニュー付きの画面が出るはずです。

screenshot2