タイトルの変更・追加

action内では設定(変更)しかできない。
既存のtitleに追加をする場合には、テンプレートで行う。


たとえばここのページの設定をsymfonyであらわす場合はこうなる

# apps/myapp/config/view.yml
default:
  http_metas:
    content-type: text/html
  metas:
    title:        hpoolの日記

そして、日記を書くページのタイトルは
hpoolの日記 - 日記を書く
というタイトルになる。


これをactionで変えようと試みる例

<?php
  public function executeEdit()
  {
     $title = $this->getResponse()->getTitle(); // とれない
     $this->getResponse()->setTitle($title . ' - 日記を書く'); // 意図したとおりにはならない
  }


結局は、templateでやる。(本来のやり方はそうなんだと思う)

<?php // editSuccess.php
  $sf_context->getResponse()->setTitle(
    $sf_context->getResponse()->getTitle() . ' - 日記を書く'
  );


どこを何に書くのがベストなのかがわかってないのがダメなんですよね。。。


追記(2008/12/19 20:50)

  • action
  • template
  • コメントで教えていただいたview.yml

などがあるが、なかなかなじめない。


例えばaction名を変えた場合に、

  1. actions.class.phpのexecuteEditを変える
  2. editSuccess.phpをリネーム
  3. view.ymlを変更

この3つ目をよく忘れる。今までに何回かあった。
テンプレートなら、なければエラーになるからわかりやすい。


あと、editSuccess:
とかってアクション全部書くのがめんどくさい。


で、どうしたいのかというと、やっぱりテンプレートでやりたい。
でも、テンプレートで$sf_context->getResponse()とかはちょっと。。。


ということで、componentでやってみる。

<?php // editSuccess.php
<?php include_component('hoge', 'title', array('before' => 'hpoolの日記 - '))?>
<?php // components.class.php
  public function executeTitle()
  {
    $this->getResponse()->setTitle(
      $this->getVar('before').$this->getResponse()->getTitle().$this->getVar('after')
    );

    return sfView::NONE;
  }


やっぱ違うかなーー