月: 2015年3月

【Symfony2】ScopeCrossingInjectionException ・・・

ScopeCrossingInjectionException ・・・
のエラーが出た時のメモ

use JMS\DiExtraBundle\Annotation as DI;

アノテーションを利用していて以下のようにInjectをした時にエラーが出た。

    /**
     * Constructor.
     *
     * @DI\InjectParams({
     *     "validatorHelper" = @DI\Inject("xxx_util.validator_helper"),
     * })
     * @param ValidatorHelperInterface $validatorHelper
     */
    public function __construct(
        ValidatorHelperInterface $validatorHelper
    ) {
        $this->injectedValidatorHelper = $validatorHelper;
    }

ScopeCrossingInjectionException: Scope Crossing Injection detected: The definition “************” references the service “xxx_util.validator_helper” which belongs to another scope hierarchy.
This service might not be available consistently.
Generally, it is safer to either move the definition “************” to scope “prototype”, or declare “container” as a child scope of “prototype”.
If you can be sure that the other scope is always active,
you can set the reference to strict=false to get rid of this error.

エラー文の最後に書いてあるように「strict=false」を追加すれば通った。

    /**
     * Constructor.
     *
     * @DI\InjectParams({
     *     "validatorHelper" = @DI\Inject("xxx_util.validator_helper", strict = false),
     * })
     * @param ValidatorHelperInterface $validatorHelper
     */
    public function __construct(
        ValidatorHelperInterface $validatorHelper
    ) {
        $this->injectedValidatorHelper = $validatorHelper;
    }

エラーをちゃんと最後まで読もう・・・。
■参考URL
Bundles/JMSDiExtraBundle/Annotations
http://jmsyst.com/bundles/JMSDiExtraBundle/master/annotations#inject

WindowsのVagrant+CentOSで共有フォルダでnpm関係でエラーが出る件[未解決]

WindowsのVagrant+CentOSで共有フォルダでnpm関係でエラーが出る件[未解決]

Windows7上のVagrantでCentOS6.5を動かしている状態で、
共有フォルダ内で「yo angular」したら
以下のようなエラーが大量に出た。

npm ERR! code EPERM
npm ERR! errno -1
npm ERR!   code: 'EPERM',
npm ERR! Please try running this command again as root/Administrator.
npm ERR! tar.unpack untar error 

「/home/vagrant」以下とかだと問題無く動くのにどうやら
共有の「/vagrant」以下で発生する問題っぽい。

まだ解決していないけど、手がかりっぽいサイトをまとめておく。

■Working with npm and symlinks through Vagrant on Windows
http://perrymitchell.net/article/npm-symlinks-through-vagrant-windows/

■running a Vagrant box on Windows fails due to path length issues
https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows

■Vagrant + シェルスクリプトでPHP開発環境をプロビジョニングしてみたメモ
http://k-holy.hatenablog.com/entry/2013/09/05/084237

■provisioning, run: “always” doesn’t
https://groups.google.com/forum/#!topic/vagrant-up/BF_L7-A1iCU

■VirtualBox(Ubuntu)で共有フォルダするときの注意。
http://rubellum.hatenablog.com/entry/20110508/1304835867

■WindowsのVMでnpm install時にモジュールのパスが255文字を超えてしまう場合
http://qiita.com/aooni_kun/items/7d3ded7b1a51886f21dc

■Windowsでのファイルパス長の制限でnpmのパッケージが使えない
http://ja.stackoverflow.com/questions/1990/windows%E3%81%A7%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%91%E3%82%B9%E9%95%B7%E3%81%AE%E5%88%B6%E9%99%90%E3%81%A7npm%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84

■Node npm windows file paths are too long to install packages
http://stackoverflow.com/questions/26155135/node-npm-windows-file-paths-are-too-long-to-install-packages

う~ん。。共有フォルダで直に作業するのは微妙かも。。

CentOS6環境にyeomanでAngularJSの雛形を作成するまで

CentOS6環境にyeomanでAngularJSの雛形を作成するまで

AngularJSを開発するときに最初の準備が
面倒なのでyeomanでAngularJSの雛形を簡単
に準備するメモ。

以下の手順ではすんなり入っているようにみえますが、
nodeとかnpmとか久しぶりなのとVagrantのメモリが少なかった
とか色々あってかなり苦戦しました。
最終的に必要だった手順だけ載せます。

インストールはVagrantに作ったCentOS6.5。
ネットワークはpublic_networkでとりあえずDHCP。
インストール時のIPは192.168.1.222。
メモリは2GBに設定。

■nodejs,npmをepelからインストール

# rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum -y install nodejs npm --enablerepo=epel
# node --version
v0.10.33
# npm -v
1.3.6

■一応最新版を入れるためにnをいれて安定版を使う

# npm cache clean
# npm install -g n
# n stable
# node -v
v0.10.33
# npm -v
1.3.6

■以前インストールを試したときにエラーが出たのでnpmで一応以下のものも先に入れておく
※あとで面倒なのでグローバルインストール
ここの作業は本来いらないはず・・・?

# npm install -g coffee-script
# npm install -g phantom
# npm install -g grunt-contrib-imagemin
# npm install -g ws

■bower,grunt,gulp,yoをnpmでいれる
※あとで面倒なのでグローバルインストール

# npm install -g bower grunt-cli gulp yo

■AngularJS雛形用のジェネレータをインストール
※あとで面倒なのでグローバルインストール

# npm install -g generator-angular

■yeomanでAngularJSの雛形を作成する
※ここからは一般ユーザでおこなった。

$ mkdir test-angular  <-適当にフォルダを作成
$ cd test-angular/
$ yo angular  <-yoコマンドの実行

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |    Welcome to Yeoman,    |
   `---------´   |   ladies and gentlemen!  |
    ( _´U`_ )    '--------------------------'
    /___A___\
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y ` 

Out of the box I include Bootstrap and some AngularJS recommended modules.

? Would you like to use Sass (with Compass)? No  <-Sassは自分は使わないのでNo
? Would you like to include Bootstrap? Yes  <-Bootstrapは使うのでYes
? Which modules would you like to include?  <-表示がよくわからないけど使うものを「◉」使わないものを「◯」に変更
 ◯ angular-animate.js
 ◯ angular-aria.js
 ◉ angular-cookies.js
 ◉ angular-resource.js
 ◯ angular-messages.js
 ◉ angular-route.js
 ◉ angular-sanitize.js
❯◯ angular-touch.js

・・・しばらく待つ・・・

Execution Time (2015-03-18 01:23:47 UTC)
loading tasks    6ms  ▇▇▇▇▇▇▇ 3%
wiredep:app    159ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 89%
wiredep:test    12ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 7%
Total 179ms

$ ll
total 76
drwxrwxr-x  6 vagrant vagrant  4096 Mar 18 01:21 ./
drwxrwxr-x  3 vagrant vagrant  4096 Mar 18 01:19 ../
drwxrwxr-x  6 vagrant vagrant  4096 Mar 18 01:20 app/
drwxrwxr-x 10 vagrant vagrant  4096 Mar 18 01:21 bower_components/
-rw-rw-r--  1 vagrant vagrant   371 Mar 18 01:20 bower.json
-rw-rw-r--  1 vagrant vagrant    38 Mar 18 01:20 .bowerrc
-rw-r--r--  1 vagrant vagrant   415 Feb 10 19:07 .editorconfig
-rw-r--r--  1 vagrant vagrant    11 Feb 10 19:07 .gitattributes
-rw-r--r--  1 vagrant vagrant    52 Feb 10 19:07 .gitignore
-rw-rw-r--  1 vagrant vagrant 10575 Mar 18 01:20 Gruntfile.js
-rw-r--r--  1 vagrant vagrant   376 Feb 10 19:07 .jshintrc
drwxrwxr-x 30 vagrant vagrant  4096 Mar 18 01:21 node_modules/
-rw-rw-r--  1 vagrant vagrant  1154 Mar 18 01:21 package.json
-rw-rw-r--  1 vagrant vagrant   282 Mar 18 01:20 README.md
drwxrwxr-x  3 vagrant vagrant  4096 Mar 18 01:20 test/
-rw-r--r--  1 vagrant vagrant   110 Feb  2 19:59 .travis.yml
-rw-r--r--  1 vagrant vagrant     3 Feb 10 19:07 .yo-rc.json
雛形が完成

■Gruntfile.jsの編集
静的サーバを立ち上げてブラウザから確認できるようにhostnameを変更しておく。
今回の場合は192.168.1.222にした。

・・・・
    // The actual grunt server settings
    connect: {
      options: {
        port: 9000,
        // Change this to '0.0.0.0' to access the server from outside.
        hostname: '192.168.1.222',
        livereload: 35729
      },
・・・・

■Gruntサーバ起動

$ grunt serve
Running "serve" task

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "wiredep:app" (wiredep) task

Running "wiredep:test" (wiredep) task

Running "concurrent:server" (concurrent) task

    Running "copy:styles" (copy) task
    Copied 1 file

    Done, without errors.

    Execution Time (2015-03-18 01:39:59 UTC)
    loading tasks   5ms  ▇▇▇▇▇▇▇▇▇▇▇ 23%
    copy:styles    16ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 73%
    Total 22ms

Running "autoprefixer:server" (autoprefixer) task
File .tmp/styles/main.css created.

Running "connect:livereload" (connect) task
Started connect web server on http://192.168.1.222:9000

Running "watch" task
Waiting...

■ブラウザで確認
yeomon-angular

■リリース用ファイル作製

$ grunt build
・・・・
$ ll
total 84
drwxrwxr-x  8 vagrant vagrant  4096 Mar 18 01:42 ./
drwxrwxr-x  3 vagrant vagrant  4096 Mar 18 01:19 ../
drwxrwxr-x  6 vagrant vagrant  4096 Mar 18 01:20 app/
drwxrwxr-x 10 vagrant vagrant  4096 Mar 18 01:21 bower_components/
-rw-rw-r--  1 vagrant vagrant   371 Mar 18 01:20 bower.json
-rw-rw-r--  1 vagrant vagrant    38 Mar 18 01:20 .bowerrc
drwxrwxr-x  7 vagrant vagrant  4096 Mar 18 01:43 dist/  <-distが作られる
-rw-r--r--  1 vagrant vagrant   415 Feb 10 19:07 .editorconfig
-rw-r--r--  1 vagrant vagrant    11 Feb 10 19:07 .gitattributes
-rw-r--r--  1 vagrant vagrant    52 Feb 10 19:07 .gitignore
-rw-rw-r--  1 vagrant vagrant 10579 Mar 18 01:39 Gruntfile.js
-rw-r--r--  1 vagrant vagrant   376 Feb 10 19:07 .jshintrc
drwxrwxr-x 30 vagrant vagrant  4096 Mar 18 01:21 node_modules/
-rw-rw-r--  1 vagrant vagrant  1154 Mar 18 01:21 package.json
-rw-rw-r--  1 vagrant vagrant   282 Mar 18 01:20 README.md
drwxrwxr-x  3 vagrant vagrant  4096 Mar 18 01:20 test/
drwxrwxr-x  4 vagrant vagrant  4096 Mar 18 01:42 .tmp/
-rw-r--r--  1 vagrant vagrant   110 Feb  2 19:59 .travis.yml
-rw-r--r--  1 vagrant vagrant     3 Feb 10 19:07 .yo-rc.json

これで準備が整ったのであとはapp以下で開発をおこなっていく。

■参考URL
・Yeoman を使って Webアプリの雛形を作ってみる
http://akiyoko.hatenablog.jp/entry/2014/07/31/024528

・yeomanを使ったAngularJSプロジェクトの始め方 2014年版
http://blog.kinzal.net/post/104245981055/yeoman-angularjs-2014

・エンカフェ
https://www.engcafe.tv/?tag=yeoman

・yeoman+grunt+bowerでangularjs+bootstrap+sass環境構築
http://ryutamaki.hatenablog.com/entry/2014/05/26/003744

・Nodeの複数バージョン管理のお供にnをどうぞ
http://dekokun.github.io/posts/2014-01-01.html

■個人メモ
front_dev

【phpStorm】SSH Terminalで接続して日本語が文字化ける場合

phpStorm

出来るだけ開発中に開くツールを減らすべく、
TerminalをphpStormのものに変更する。

SSH Terminalに接続して日本語が文字化ける場合↓

「File」->「Settings」->「Tools」->「SSH Terminal」

「Default encoding」を「UTF-8」に変更。

Terminalを「Floting Mode」で利用する場合デフォルトでは
Terminalを最小化する ->「Shift」+「Esc」
Terminalを表示する -> 「Alt」+「F12」
データベース接続もphpStormのものを利用するようにする。
「View」 -> 「Tool Windows」 -> 「Database」

【FuelPHP】FuelPHPでdompdfを使うまでの道のり

【FuelPHP】FuelPHPでdompdfを使うまでの道のり

前回まではoilコマンドで「fuel/packages/pdf」に
fuel-pdfをインストールして使っていたけど、
フォントのインストールしたり、設定ファイルを色々と
変更するなどしていると管理が面倒になったので、
fuel-pdfをやめて、dompdf自体を「fuel/app/vendor」
にいれて管理するように変更した。

前回のインストールの様子
【FuelPHP】FuelPHPでfuel-pdfを使うまでの道のり

dompdf自体をgitで設置することで前回までに起きていた
クラスが見つからない問題などが一切でなかったので、
こっちのやり方のほうが安心できる。
同梱されてる「tcpdf」使って無いしこれで問題ない。

とりえあず設定方法のメモ。

■fuel/app/vendor以下にdompdfをいれるので移動。

$ pwd
/home/linux-user/public_html/tmp/appname/fuel/app/vendor

■dompdfをcloneする

$ git clone https://github.com/dompdf/dompdf.git
Initialized empty Git repository in /home/linux-user/public_html/tmp/appname/fuel/app/vendor/dompdf/.git/
remote: Counting objects: 5634, done.
remote: Total 5634 (delta 0), reused 0 (delta 0), pack-reused 5634
Receiving objects: 100% (5634/5634), 13.47 MiB | 3.40 MiB/s, done.
Resolving deltas: 100% (3967/3967), done.

■できたフォルダに移動して・・・

$ cd dompdf/

■サブモジュールのinitとupdateで空になってた「php-font-lib」が入ります。

$ git submodule init
Submodule 'lib/php-font-lib' (https://github.com/PhenX/php-font-lib.git) registered for path 'lib/php-font-lib'

$ git submodule update
Initialized empty Git repository in /home/linux-user/public_html/tmp/appname/fuel/app/vendor/dompdf/lib/php-font-lib/.git/
remote: Counting objects: 885, done.
remote: Total 885 (delta 0), reused 0 (delta 0), pack-reused 885
Receiving objects: 100% (885/885), 9.25 MiB | 1.82 MiB/s, done.
Resolving deltas: 100% (493/493), done.
Submodule path 'lib/php-font-lib': checked out 'c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82'

■マルチバイト対応のためにIPAフォントを準備
(前回のインストール時に/home/linux-user/.fonts/にダウンロード済み)

$ php load_font.php ipagothic /home/linux-user/.fonts/IPAfont00303/ipagp.ttf
Unable to find bold face file.
Unable to find italic face file.
Unable to find bold_italic face file.
Copying /home/linux-user/.fonts/IPAfont00303/ipagp.ttf to /home/linux-user/public_html/tmp/appname/fuel/app/vendor/dompdf/lib/fonts/ipagp.ttf...
Generating Adobe Font Metrics for /home/linux-user/public_html/tmp/appname/fuel/app/vendor/dompdf/lib/fonts/ipagp...

■テスト用のコントローラを作成して実行

public function action_pdftest()
{
    require_once( APPPATH .'vendor/dompdf/dompdf_config.inc.php');
    $pdf = new \DOMPDF();
    $html ='<!DOCTYPE html>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>xxx</title>
        <style>
        body { font-family: "ipagothic;" }
        </style>
        </head>
        <body>
        マルチバイト
        </body>
        </html>';
    $pdf->load_html($html);
    $pdf->render();
    $pdf->stream("sample.pdf", array("Attachment" => 0));
}

dompdf/dompdf
https://github.com/dompdf/dompdf

Usage dompdf
https://github.com/dompdf/dompdf/wiki/Usage