2012年11月5日月曜日

Symfonyのアセットヘルパー(stylesheet_tagなど)

アセットヘルパーについてのメモ書き。

アセットヘルパーを使用すると、画像、スタイルシート、JavaScriptファイルを
レスポンスに含めることができる。
拡張子を記載する必要はない(.png/.js/.cssの拡張子を自動的に設定してくれる)

image_tag():画像サイズを指定するときは、sizeで指定する。
stylesheet_tag()
javascript_include_tag()

なお、指定したファイルは、下記を自動的に検索します。
web/legacy/images/ 配下
web/js/ 配下
web/css/ 配下

特定のファイルを指定するときは絶対パスを記述する必要あり。

詳細は下記のページを参照
http://symfony.com/legacy/doc/gentle-introduction/1_4/ja/09-Links-and-the-Routing-System

symfonyのlayout関係メモ

<layout.pnp>
全てのページで使用されるレイアウトを作成する。
ヘッダ・コンテンツ・フッターなどを定義して、それぞれのページで変わる
コンテンツ部分は動的に生成する感じかな。

<view.yml>
レイアウトの設定などを記述するファイル。
レイアウト内から、include_***()でview.ymlに記述した内容を
使用することができる。

<Responseオブジェクト>
view.ymlで行っている設定を動的に行うことが可能。


と、ざっくりした内容ですが、ざっくり感で覚えたいと思います。


詳細は下記のページに載っているので、要チェックです!
http://codezine.jp/article/detail/1063

2012年11月1日木曜日

Symfonyでテンプレートからデバッグツールバーにログ出力

テンプレートファイルに下記を追記すればOK!

<?php use_helper('Debug') ?>
<?php echo log_message('出力する内容', 'err') ?>

変数の内容を出力する場合は
<?php echo log_message(sprintf('変数の内容を出力:%s, $hoge), 'err') ?>

てな感じです。

ついでに、忘れないために

<actionから出力>
    $this->logMessage('{sfAction} アクションから出力.', 'err');
   
<その他>
  sfContext::getInstance()->getLogger()->err('{sfAction} 出力内容');

2012年10月23日火曜日

The Command Line Tools for Xcode don't appear to be installed

MacでGitを使おうと思い、コマンド「sudo port install git-core」実行したところ
下記のエラーが発生。

The Command Line Tools for Xcode don't appear to be installed

なんぞや?と思い調べてみると「Command Line Tools for Xcode」をインストールしている
必要があるらしい。

下記のサイトからダウンロード・インストール後に
https://developer.apple.com/downloads/index.action

コマンド「sudo port install git-core」を実行したところ
無事インストールすることができました!

2012年10月20日土曜日

Apple Mach-O Linker (id) Error

約1年ぐらいメンテしてなかったアプリをメンテしようと思い

Xcodeでビルドすると、Apple Mach-O Linker (id) Error が発生。

ログを見てみると、どうやらリンクの参照先にライブラリファイルがないとのこと。

どうやらフォルダ階層をいじった際にやってしまったらしい。。。

凡ミスですね(^^;

ライブラリファイル自体はプロジェクト内にあるので

「TARGETS」>「Build Phasesタブ」>「Link Binary With Libraries」に
ライブラリファイルをドラッグ&ドロップすればライブラリファイルを登録できました!

ライブラリファイルの参照パスは
「TARGETS」>「Build Settingsタブ」>「Search Paths」の「Library Search Paths」で
確認できました。

なお、修正などされる場合は自己責任でお願いします。


undeclared identifier 'ADBannerContentSizeIdentifierPortrait';

仕事も一段落して、久しぶりにアプリ開発。

環境を最新のXcode4.5に入れ替えビルドすると

undeclared identifier 'ADBannerContentSizeIdentifierPortrait';

というエラーが・・・はて?何故と思いググってみると

ありがたいことに、先駆者の方が解決方法を発見していました。

'ADBannerContentSizeIdentifierPortrait' の対処法

これにて一件落着です。
先駆者の方、ありがとうございます!

それにしても何故、importを追記しなければならないのか分かりません。。。

ちょいと勉強してみますか!

2012年9月16日日曜日

safariでセレクトボックスのレイアウトが微妙にずれる

最近はCSSをいじって、サイトのレイアウトを整えることも行っているのですが
IE,FireFoxでは全ての部品が画面の左部分に寄って表示されるところが
safariだとセレクトボックスだけが微妙に左揃えにならない。。。

セレクトボックスだけが数ピクセルほど右側になっているので
画面上の部品が左揃えではなく、インデントがガタガタになって表示されるので
かなり気になる。

と、Safariを開発モードにして調べてみると
どうやら、Safariで表示されるセレクトボックスではデフォルトでmargin:2pxに
なっており、ここが原因っぽい。

Selectタグにmargin-left:0px; を自前で設定すると、事象が解決しました。

今までサイトのレイアウト調整をしたことがなかったので
ブラウザで独自にCSSが当てられるとは知らなかった。。
いい勉強になりました♪


2012年9月13日木曜日

safariでpdfをダウンロードした場合に、拡張しが.htmlになる件

開発中のAPでIEとFireFoxなら、ダウンロードボタンを押した後に
PDFファイルがダウンロードできるのに、
Safariだと、ダウンロードしたファイルに.html拡張子がつく。。。
何故に???

少々調べてみるとこのページを発見
HTTP :: Content-Disposition: inline / attachment

jpagのダウンロード方法のソースが載っています。
今回はPDFのダウンロードなので、あまり参考にならないかなぁ・・・
と思いながらながめていると、ソースの最後に
"exit;"
という文字が・・・。

なんとなくピーン!と来たので、"exit;"をソースに追加し
Safariからダウンロードすると、無事にPDFファイルとして
ダウンロードできました。

ただ、処理の最後に"exit;"をつけると何故、.htmlが拡張子に
追加されなくなったのかは謎。

推測の域はでませんが、phpでファイルを読み込み、出力後に
exitをしているので、htmlにレンラリング?されないためでしょうか。。。
と、まだまだ勉強不足ですが、とりあえずこんな感じでした。


2012年9月11日火曜日

safariとfirefoxでのtextareaの違い

firefoxでheightとwidthを指定して表示していたtext areaが
なぜか、safariでは4pxほど幅が大きくなって表示される??

ちょいと調べてみると、どうやらsafariのtextareaはデフォルトで
padding:2px となっているので、幅がfirefoxで表示するよりも4px長く
なっていたのが原因。

ただ、safariでpadding:0 で表示するとtextareaの枠線と、textarea内に表示している
文字が近く少々見づらいため
safari側にあわせて、textareaのスタイルをpadding:2px 、widthを元々の値から-4pxして
対応しました。

これにて一件落着です!

2012年6月10日日曜日

openpne3 Symfony cc で Warning: array_merge()

OpenPNE3でSymfony ccとキャッシュをクリアすると下記のWarningが発生。
       
Warning: array_merge(): Argument #1 is not an array in openpneルート
\lib\config\opProjectConfiguration.class.php on line 131

Warning: Invalid argument supplied for foreach() in openpneルート\li
b\config\opProjectConfiguration.class.php on line 144

Notice: Undefined index: session_storage in openpneルート\lib\config
\opProjectConfiguration.class.php on line 141

Notice: Undefined index: session_storage in ルート\lib\config
\opProjectConfiguration.class.php on line 141

公式ページのバグでも管理されているようで、php4とphp5でのarray_mergeの使用の違いで
発生するようだ。

なお、自分のPHPのバージョンは5.3.8でした。

修正方法
================================
openpneルート\lib\config 配下の
opProjectConfiguration.class.phpの131行目を下記のように修正すると直りました。
(openpne3.6.3)

<修正前>
$config = array_merge($config, sfYaml::load($path));
<修正後>
$config = array_merge((array)$config, sfYaml::load($path));
================================

と、一件落着です。

2012年6月3日日曜日

Symfonyでカスタムバリデータを作成 ちょいとハマッタのでメモ

提供されているバリデータでチェックできない要件があったので自前で作成。

作成するには、setPreValidator() もしくは、setPostValidator()で作成します。
それぞれの違いは下記のとおり。

setPreValidator()
フォームから送信された生のデータを使用できる。
setPostValidator()
フォームの値がクリーンされたデータを使用できる。

とりあえず、setPostValidator()を使用して実装。
内容としては、A項目とB項目の両項目に値が入力されていない場合はエラーにするというもの。
※どちらも空の場合はエラーにしない。

とりあえず、実装して動作確認。
よし!動いた!!
と、試験に取り合かかると、あるパターンの時のみチェックをスルーしてしまう事象が!
そのパターンとは、文字数制限をオーバーしているときに発生。

ん?なにゆえ?と少々悩みましたが、結局は凡ミスでした。
理由は 「setPostValidator()は、フォームの値がクリーンされたデータを使用できる」
ということです。
「クリーンされたデータ」ということは、文字数制限などに引っかかった値は”汚染された値”ということで、クリーン後は、空文字?のような扱いになり、作成したカスタムバリデータではフォームの生のデータではなく、クリーン後の空文字を取得していたためチェックに引っかかりませんでした。

なので、フォームから送信された生データを使用できる「setPreValidator()」に変更したところ
無事チェックが行えました。

次回からも気を付けねば。











2012年5月29日火曜日

Symfony sfWidgetFormChoiceに設定した項目を取得する方法

sfWidgetFormChoiceに設定した配列をactionで取得する方法

$form = new SampleForm();
$choiceArray = $form->getWidget('ウィジェット名')->getChoices();

これで、$choiceArrayに連想配列が格納されます。

2012年5月27日日曜日

さくらレンタルサーバにOpenPNEをインストール中にbus errorで失敗

タイトルの通り、bus errorが発生。
原因が分からない。

「bus error」でググッてもメモリの不正書き込みやら、ハードの故障やらと
直接の原因っぽい物がない。

ん~どないしようということで、独自に開発したプラグインを取り除いて
インストールをしてみると・・・インストール成功!!

ということは、開発したプラグインに原因があるのか?!
と思い、プラグインのソースを数世代前のものに戻して
再度、OpenPNEをインストールすると、インストール成功!!

ただ、ソース自体にあまり差分は無いので、一体何故にbus errorが発生するのか・・・
と、ここで開発したプラグインが重くてインストールに失敗しているのか?と思い立つ。

んで、以下の手順で無事にインストールすることができました。
①OpenPNE3.6に何も手を加えないでインストール。
②インストール後に、OpenPNEのpluginsフォルダに独自作成したプラグインを配置
③php symfony doctrine:build --all --and-load でDBの初期化
④事前に取得したバックアップデータを流す。

と、これで無事にインストールできました。
ふぅ、なんか疲れました。

2012年5月25日金曜日

さくらレンタルでsymfonyコマンドが効かないときの対処

さくらレンタルサーバにOpenPNEをインストールしようとしたときに
たまにsymfonyコマンドが効かない?時がある。

例えば、symfony cc と入力しても実行されない。。。
理由は分かりませんが、こんな時は
①ローカル環境にOpenPNEをもってくる。
②ローカル環境にてsymfony ccをする。
③ローカル環境のOpenPNEを圧縮してさくらサーバにftp。

と、こんな感じで一度ローカル環境にてsymfony ccをすれば解決できることがあります。
ちょいと釈然としませんが、一応経験則ということで。

2012年5月21日月曜日

DoctrineのexecuteとfetchOneの違い

返ってくる結果が1件のみのSQLを発行する際、executeを使ってましたが
fetchOneというのもあるので少々違いを調べてみました。

execute
→結果をオブジェクト配列で返す。

fetchOne
→結果をオブジェクトで返す。

なるほど、fetchOneはオブジェクトで返されるから、get~で返り値にアクセスできる!
個人的にはfetchOneの方が楽に返り値を取得できるように思う。
今後は、一件が確定のSQLはfetchOneを使おう。

ちなみに、今回参考にしたサイトは下記です。
第8章 - モデルレイヤーの内側 (Doctrine)

2012年5月14日月曜日

さくらレンタルサーバから携帯アドレス宛にメールを送信

さくらレンタルサーバに設置したOpenPNE3.6.1から携帯アドレス宛に招待メールを送付したところ
Softbankには届くのに、auには届かない・・・何故!!
と思い少々調べてみると、既に先駆者の方が解決方法を書いていました。
若年管理職その弐。 OpnePneの招待メールがau宛に届かなかったら

なるほど、SPFで送信者認証しないと携帯の設定ではじかれるのか。。。
と、確認のためauのなりすまし拒否設定を解除すると、すんなりと招待メールを受信。
やっぱり、原因はSPFが未設定だったからですね。

気を取り直して、さくらレンタルサーバからゾーンの編集を行おうとしましたが
編集ボタンが非活性になっている!!
何故!
ん~初期ドメインではだめなのか??
仕方がないのでサポートにTELしてみました。
結果は、案の定、初期ドメインではサーバのゾーン編集ができないとのこと
SPFを設定したかったら独自ドメインを取得してくださいな候。とのこと。
まぁ、一番安いドメインで年間1800円で取得できるからいいか。
さて、明日は独自ドメイン取得して、ゾーン編集してみます!

2012年5月13日日曜日

MySQL5 実行SQLをログに出力する方法

動作確認でSQLの確認をしたかったので調べてみました。
運用環境ではサーバに不可をかけるので要注意です。

1.my.iniの[mysqld]セクションに下記を追記
  log="query.log" ←出力するファイル名を指定

2.mysqlを再起動
  mysql\data配下にquery.logが作成され、そこにログが出力される。

と、意外と簡単に設定できました。

2012年4月20日金曜日

symfonyで編集から確認画面に遷移するときにハマッタのでメモ

編集から確認画面に遷移する際に、どうしてもbindでエラーが発生する。

しかも、Formクラスで「useFields」に指定していないウィジェットで引っかかる・・・。

何故???

と、ブラウザ上→右クリック→ソースの表示、でソースを確認すると
なにやら、hidden項目でuseFields指定以外の項目「id」が出力されているではないか!!

ん~でもuseFieldsで指定していないし・・・
と、ググッてみると「unset」した項目は「フィールドのウィジェットとバリデータの両方が削除されます。」
ここに書いてある。。。

とりあえず、「unset」することで謎のhidden項目は出力されなくなって、
bindでもエラーがでなくなった。
使わないウィジェットは明示的に「unset」した方がいいかもしれない。

ただ、何故「useFields」だと指定していない値がhidden項目で出力されるかは謎のまま。
もうちょい、ググッてみるかぁ~。

2012年4月14日土曜日

MacPortsの設定をする

GitHubを使用しようと思い、そのついでにMacPortsの設定をしようと思い立つ。

1.下記アドレスからダウンロード
 http://www.macports.org/install.php
自分はLionなので「Lion」を選択しました。
MacPorts-2.0.4-10.7-Lion.dmg

2.インストール
ダウンロードした.dmgをマウントし.pkgファイルをダブルクリックすると
インストールが開始されます。

3.ディレクトリパスを通します。
.bash_profileに下記3行を追加します
        ※ファイルが無い場合はホームフォルダ直下に「.bash_profile」ファイルを
作成してください。(不可視ファイルなので、vim)で編集します

            export PATH=$PATH:~/bin
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH


4.portsツリーを最新にします
sudo port selfupdate
sudo port sync


と、こんな感じでしょうか。
今回、参考にさせていただいたサイトは下記となります。
ありがとうございました!!

MacPortsのインストール/設定
Mac OS X でシェルのパスを通す

2012年3月31日土曜日

さくらレンタルサーバにOpenPNE3.6をインストールしました

先日、さくらのスタンダードプランを契約し、OpenPNE3.6をインストールしました。
その際、メールの設定ではまったのでメモります。

/config/OpenPNE.ymlを編集

 
これで、ユーザ画面から招待メールを送付できるようになりました。
やっと運用できるようになりましたが、まだまだ奥が深そうです。