2月 07

Symfony(1.4)でZendのライブラリを使う。


今日はsymfonyでzendのライブラリを使うお話。
zendってのは、pearと同じように色々便利なことができるモジュール群と考えてもよい。
例えば、phpでHTTPリクエストしたり、XMLを解析したり、など一般的なものからtwitterやAmazonのapiを扱うものまでかなり便利なものが多い。
種類こそpearより少ないが、使いやすさはpearよりもはるかに使いやすいと思われる。

まずは、zendのインストール。今回は「/usr/local/」配下にインストールする。

cd /usr/local
wget http://framework.zend.com/releases/ZendFramework-1.10.0/ZendFramework-1.10.0.tar.gz
tar -xvzf ZendFramework-1.10.0.tar.gz
mv ZendFramework-1.10.0 Zend

こんな感じ。最後のmvは名前をなんとなく「Zend」にしておきたいだけで、意味はない。
最新のZendはココでチェック。

次にphp.iniに以下を追記する。
これがないとうまく動かない。
(すでにinclude_pathが定義されている場合は「:/usr/local/Zend/library」を足してください。)

include_path=".:/usr/local/Zend/library"

んで、次にsymfonyのautoload.ymlに以下のように記述する。
autoload.ymlはデフォrフトでは設置されていないので、アプリケーションのconfigディレクトリの下に作成する。
(プロジェクトのコンフィグ配下でもよいと思われる。)

autoload:
  # zendframework
  zendframework_lib:
    name:           zendframework lib
    path:           /usr/local/Zend/library
    recursive:      on

これで

symfony cc

うって完了。
あとはソース上のすきなとこに

$twitter = new Zend_Service_Twitter('morinoyume', 'morinoyume');

見たいな感じで、zendのライブラリを呼べばOK!簡単♪
上記はzendのtwitter用のライブラリですね。

zendは扱いやすいので、みなさんも是非!

参考:ueblog

written by YSU \\ tags: ,

1月 26

symfony1.0はバッチファイルを作って、symfonyをイニシャライズして、コマンドを実行するというものであった。
symfony1.2からはバッチ処理はsymfonyのタスクで行うことになっている。
1.0ユーザーの私は困惑したので、記事にしておく。

今回はターミナルに「Hello World」を表示する簡単なタスクを作ってみることにする。

まずは、ベースとなるタスクの作成。

symfony generate:task helloworld

すると、lib/task/helloworldTask.class.php
というファイルができるので、

$this->namespace        = 'batch';
$this->name             = 'helloworld';

と適当にnamespaceとnameをふっておく。

// add your code here
echo "Hello World!!";

そして、add youre code hereの部分に上記のように記述。
あとは、タスクで実行するだけ。

symfony batch:helloworld
>Hello World!!

symfonyコマンドでバッチ処理ができている。
なんか素敵♪

written by YSU \\ tags: ,

11月 29

propel.iniでmysqlを使用することを記述し

symfony propel-build-schema

って打ったら

[propel-schema-reverse]there was an error building XML from metadata:could not find driver

と出てきた。
かなり悩んだ。困っている人もいると思うので解決方法を残しておく。

まず、ここでいうdriverというのはPDO(PHP Data Objects)のこと。
phpでmysqlに接続しにいくdriverってことですね。windowsのodbcみたいなものかー
なので、phpにpdoとpdo_mysqlっていうライブラリが無いと動かない。

peclで簡単にインストールできる。
まずpdo

pecl install pdo

そして、pdo_mysql

pecl install pdo_mysql

この2つのインストールがエラーで落ちることもあるが、ググッってがんばる。
たいていyumでインストールすれば治る系ばかり。

インストールしたらphp.iniに

extension=pdo.so
extension=pdo_mysql.so

の2行を足す。
かならず、↑の順番で書かないといけない。
(私は、順番がだめということに気づかず2時間以上も悩んだ・・・)

さて、ここまで来たらいけるかとおもいきや、

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

ソケットがないだと!?pdo_mysqlのソケットの指定が「/var/lib/mysql/mysql.sock」になっている。
なんとかこのソケットの向き先を本来の向き先に変えたいのだが方法が見つからない・・・
仕方なくシンボリックリンクで逃げることに。

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

ようやく実行

symfony propel-build-schema

いけました。これでやっと開発できる。

written by YSU \\ tags: ,

11月 28

symfonyのインストールが完了したので、
symfonyをつかってHello! World!を出力するまで行う。
symfonyのインストールはコチラを参照。

また、apacheのmod_rewriteというモジュールが必要です。
無い人はインストールしておきましょう。

今回はhelloというプロジェクトを開発し、Hello! World!を出力するアプリケーションを作成します。

まずは、プロジェクトを作ります。
どこでもよいので、プロジェクト用のディレクトリを作成。移動。
ここでは/project/helloがsymfonyコマンドを打つ基本のディレクトリになります。

mkdir /project/hello
cd /project/hello

次に、symfonyのプロジェクトを初期化する。
*symfonyコマンドが打てないならsymfonyにパスを通しておいてください。

symfony init-project hello

次に、アプリケーションを作成する。
今回はhello! world!というプログラムを公開するアプリケーションなので「front」というアプリケーションを作ります。
もし、このプロジェクトを管理する管理画面等を作る場合は、「back」といったアプリケーションを作ります。

 symfony init-app front

さて、ここまできたら/project/hello/web配下にindex.phpというコントローラーが配置されます。
実際にwebでアクセスした際に起動する実行ファイルはこのindex.phpになります。
なので、ここを実行するようにapacheの設定を行います。
例えば、hello.morinoyume.comというドメインなら以下のようになります。
(*hello.morinoyume.comはありませんよ)
ドキュメントルート、DirectlyIndex、Alias /sf...がミソです。
Alias /sfは自分がsymfonyをインストールしたディレクトリのsfを指定してあげましょう!

<VirtualHost *>
    ServerName hello.morinoyume.com
    DocumentRoot /project/hello/web
    ErrorLog logs/hello_error_log
    CustomLog logs/hello_access_log combined

    #php
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps

    #directry index
    DirectoryIndex index.php

    Alias /sf /usr/local/php/PEAR/data/symfony/web/sf

    <Directory />
      Order Deny,Allow
      Deny from all
      Allow from all
    </Directory>

   <Directory />
     Options All
     AllowOverride All
   </Directory>

</VirtualHost>

この時点で、http://hello.morinoyume.com/にアクセスして、

symfony

「Symfony Project Created」という画面になれば、symfonyのセッティング完了です。
index.phpにアクセスできたにも関わらず、上記のような綺麗な画面にならなければ、「/sf」のAliasの設定が間違っています。
もし、index.phpにアクセスできないようなら、apacheの設定ミスです。

さて、プロジェクトができたら、いよいよモジュールを開発しましょう。
今回はfrontアプリケーションにindexというモジュールを作成して、hello!worldを出力するモジュールを作ります。
もし、Hello!Worldアプリケーションのアカウント登録のインターフェイスを作るなら「account」モジュールなどモジュールを分けてあげましょう。

symfony init-module front index

これで、indexモジュールができました。
/project/hello/apps/front/modules/ 配下にindexモジュールができていることがわかると思います。
次はテンプレートにHello! World!を書きましょう。

vi /project/hello/apps/front/modules/index/templates/indexSuccess.php

に「Hello!World!」と書いてください。

次は、アクション(プログラム)にこのテンプレートを出力するように

  public function executeIndex(sfWebRequest $request)
  {
    return sfView::SUCCESS;
  }

と書きましょう。
これで、完了です。
http://hello.morinoyume.com/index
にアクセスしてみてください。
「Hello!World!」という文字が表示されたら成功です!

だらだらと長くなってしまった・・・
わかりにくい投稿になってしまいましたね・・・。

written by YSU \\ tags: ,

11月 28

さて、今日は天気良すぎて外にでかけたいけど、
仕事で疲れてるのもあるし、家でサーバーをいじることに。

今日はsymfonyのインストールから簡単なアプリケーションまで作りたいなー
ってことでまずはsymfonyのインストール(php,pearのインストール済が前提)

まずはpearのアップグレード

>pear upgrade PEAR

symfonyのチャンネル追加

>pear channel-discover pear.symfony-project.com

インストールするバージョンの確認。

>pear remote-list -c symfony
CHANNEL SYMFONY AVAILABLE PACKAGES:
===================================
PACKAGE VERSION
pake    1.1.4
symfony 1.2.9

symfony1.2.9。最新のstableバージョン。
もうすぐ1.4になるらしい・・・。とりあえず今回は1.2.9で。
symfonyのインストール。

>pear install symfony/symfony

むっ!エラーが

symfony/symfony requires PHP extension "dom"

よくわからないけど↓で解決

>yum install php-xml

再度、インストール

>pear install symfony/symfony

無事インストールできたみたい。
バージョンの確認。

>symfony -V
symfony version 1.2.9 (/usr/local/php/PEAR/symfony)

では、symfonyをつかった記事は次回以降で。
1.2からO/RマッパーとしてDoctrineが使える。
気になるなー。

written by YSU \\ tags: ,