Archive for 7 月, 2009

eclipseで改行コード設定 CR/LF

kokoroです。
今まで全く知らなかったのですが、改行コードには、

CR(Carriage return:キャリッジリターン)
LF(Line Feed ラインフィード)

という種類があり、
多くのシステムでは、改行コードを1つか2つの特殊文字の連続で表している、とのこと!
※ASCII文字コードに基づくシステムでは、LF(改行、0×0A)、CR(復帰、0×0D)のいずれかか、CRの後にLFという文字の連続で表している。

・  LF: UNIX系のシステム。Linux、AIX、Xenix、Mac OS X、BeOS、Amiga、RISC OSなど。
・  CR+LF: CP/M、MP/M、MS-DOS、OS/2、Microsoft Windows。
・  CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。

Windowsの私がCRの設定になっていたので、MacのmakiさんがCRで改行されたソースコードをマージしようとすると、コンフリクトしてしまうとのこと。そこで、私のWindowsのeclipseの改行コードを、 unixコードのLF にします。

eclipseの改行コード設定

eclipseの改行コード設定


Eclipse3.2の場合、ウィンドウ->設定->一般->ワークスペースで新規テキスト・ファイルの行区切り文字をその他Unixを選択します。プロジェクトごとに設定を変えたい場合は、プロパティの情報->新規テキスト・ファイルの行区切り文字から変更します。

ついでに、画像右の赤い枠の部分で、全てのプロジェクトの文字コードを「UTF-8」に設定しました。
これで張り切って開発できそうです!

関連する投稿

コメントはまだありません


jobeet5日目 ルーティング

ORMはDoctrineによるjobeetプロジェクト、5日目はルーティングです。
現在、ローカルにあるページのURLは、どれも、/job.php?id=1など、意味の分からないものになっていますが、
これらを、/job/show/id/1など、意味のあるURLにして表示させるような設定を学びます。

ルーティングは内部URIと外部URLを管理しますし、リクエストを受け取った時、ルーティングはURLを解析して内部URIに変換します。私も、普段何気なく、routing.ymlというファイルで、URLを設定したりしていますが、URLを適切なものに変換して、”ソースコードの内部構造を分からないように表示させる”、というセキュリティ強化という面もあるようです。(知りませんでした!)

jobeet5日目の内容は、4日目までに作成したページのURLを、意味のあるものに変換する、という作業です。

参考サイトはこちら

homepageルートのmodule変数の値をjobに変更します

# apps/frontend/config/routing.yml
homepage:
  url:   /
  param: { module: job, action: index }



homepageルートを使うようにレイアウト内の Jobeetロゴのリンクを変更します。

<!-- apps/frontend/templates/layout.php -->
<h1>
  <a href="<?php echo url_for('@homepage') ?>">
    <img src="/images/jobeet.gif" alt="Jobeet Job Board" />
  </a>
</h1>



これで、jobeetのトップページのロゴをクリックすると、jobeetのページにリンクが貼られました。

次に、求人ページのURLを意味のあるものにしていきます。
routing.ymlファイルを編集しファイルの冒頭にjob_show_user`ルートを追加します。

job_show_user:
  url:   /job/:company/:location/:id/:position
  param: { module: job, action: show }


indexSuccess.php内で呼び出されるurl_for()を変更

url_for('job/show?id='.$job->getId().'&company='.$job->getCompany().
  '&location='.$job->getLocation().'&position='.$job->getPosition())


ここまでで、jobeetのページは
http://jobeet.kokoro/frontend_dev.php/job/Sensio+Labs/Paris%2C+France/1/Web+Developer
というURLで表示されます。
これを、
http://jobeet.kokoro/frontend_dev.php/job/sensio-labs/paris-france/1/web-developer
という、綺麗にルーティングされたページにしていきます。




全ての非ASCII文字をハイフン(-)に置き換えたカラム値にする(上記の、%2C+、などの記号を全て-にします) JobeetJobファイルを開いて、クラスへ下記のメソッドを追加します。

// lib/model/doctrine/JobeetJob.class.php
public function getCompanySlug()
{
  return Jobeet::slugify($this->getCompany());
}

public function getPositionSlug()
{
  return Jobeet::slugify($this->getPosition());
}

public function getLocationSlug()
{
  return Jobeet::slugify($this->getLocation());
}


lib/Jobeet.class.phpファイルを作り slugifyメソッドを追加します。

// lib/Jobeet.class.php
class Jobeet
{
  static public function slugify($text)
  {
    // 文字ではないもしくは数値ではないものすべてを-に置き換える
    $text = preg_replace('/\W+/', '-', $text);

    // トリムして小文字に変換する
    $text = strtolower(trim($text, '-'));

    return $text;
  }
}

routing.ymlの、job_show_userルートでバーチャルアクセサで実際のカラムの名前を置き換えます。

job_show_user:
  url:     /job/:company_slug/:location_slug/:id/:position_slug
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: show }
  requirements:
    id: \d+
    sf_method: [get]



.ymlファイルを変更した後は、symfonyのキャッシュをクリアします。

$ php symfony cc


Jobeetオブジェクトを読み取るためにルートオブジェクトを使うexecuteShow()メソッドを変更します。

class jobActions extends sfActions
{
  public function executeShow(sfWebRequest $request)
  {
    $this->job = $this->getRoute()->getObject();

    $this->forward404Unless($this->job);
  }

  // ...
}


routing.ymlファイルを以下に修正します。

# apps/frontend/config/routing.yml
job:
  class:   sfDoctrineRouteCollection
  options: { model: JobeetJob }

job_show_user:
  url:     /job/:company_slug/:location_slug/:id/:position_slug
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: show }
  requirements:
    id: \d+
    sf_method: [get]

# default rules
homepage:
  url:   /
  param: { module: job, action: index }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/*


上記のob ルートは実際には下記に示す 7つのsfDoctrineRouteルートを自動的に生成しています。

job:
  url:     /job.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: list }
  param:   { module: job, action: index, sf_format: html }
  requirements: { sf_method: get }

job_new:
  url:     /job/new.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: new, sf_format: html }
  requirements: { sf_method: get }

job_create:
  url:     /job.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: create, sf_format: html }
  requirements: { sf_method: post }

job_edit:
  url:     /job/:id/edit.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: edit, sf_format: html }
  requirements: { sf_method: get }

job_update:
  url:     /job/:id.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: update, sf_format: html }
  requirements: { sf_method: put }

job_delete:
  url:     /job/:id.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: delete, sf_format: html }
  requirements: { sf_method: delete }

job_show:
  url:     /job/:id.:sf_format
  class:   sfDoctrineRoute
  options: { model: JobeetJob, type: object }
  param:   { module: job, action: show, sf_format: html }
  requirements: { sf_method: get }


すべてのURLに対してルートを定義してみます。jobルートはJobeetアプリケーションを記述するために必要なすべてのルールを定義するので、 routing.yml設定ファイルからデフォルトのルートを削除もしくはコメントアウトします。

# apps/frontend/config/routing.yml
#default_index:
#  url:   /:module
#  param: { action: index }
#
#default:
#  url:   /:module/:action/*


ここまでで、jobeet5日目の内容は終わりです。
参考テキストの、「アクションテンプレートにおけるルーティング」の辺りの理解が今ひとつですが、URLのルーティング自体は完了です。6日目以降に、理解不足の部分のシワ寄せが来ないといいのですが。。。。また、私たちが開発しているサイトで、どの辺りを参照すれば良いのか、makiさんに質問してみようと思います。

関連する投稿

コメントはまだありません



SetPageWidth