symfony1.2でDoctrine1.1使ってJobeetチュートリアル10日目

Form周りの話。

Customizing the Job Form

// apps/frontend/modules/job/template/showSuccess.php
<img src="/uploads/jobs/<?php echo $job->getLogo() ?>" alt="<?php echo $job->getCompany() ?> logo" />

imageタグきた!

<?php echo image_tag(
  public_path('/') . 'uploads/jobs/' . $job->getLogo(),
  array('raw_name' => true, 'alt' => $job->getCompany() . 'logo')
) ?>

自分の様に、web rootがhost直下じゃない場合は書き換えが必要。
ポイントは二つ。

  • public_path('/')でweb rootパスを取得
  • image_tagのオプションにraw_nameを与えることで、srcにimage_tagの第一引数の値を代入(web/images内を探しに行かない)


Customizing the Job Formが終わった直後に、jobを新規登録・編集してもbindの第二引数が無いって怒られるので、
動作テストしたい場合は、

// apps/frontend/modules/job/actions/actions.class.php
  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind(
      $request->getParameter($form->getName()),
      $request->getFiles($form->getName())        // この行が必要
    );
    if ($form->isValid())
    {
      $jobeet_job = $form->save();

      $this->redirect('job/edit?id='.$jobeet_job['id']);
    }
  }

と、追加してあげてください。
あと、uploads/jobsフォルダのパーミッションを変更しないとロゴがアップできません。

The Form Action

Deleteアクションどこいった?

// apps/frontend/modules/job/actions/actions.class.php

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $job = $this->getRoute()->getObject();
    $job->delete();

    $this->redirect('@job');
  }

Deleteだけ昔のままなんで、getObject形式に変更。