複数のブロックで利用する共通のライブラリを作成する

2016年7月5日 at 23:58

みなさん、こんにちは

いつもお世話になっております。

ただいま自作のブロックを3つほど作成いたしまして、各ブロックにおけるcontroller.phpにて一部同じロジックを実装しております。
環境は以下の通りです。

自作サーバー:CentOS 6.7
PHPバージョン: 7.0.2
concrete5バージョン: 5.7.5.8

そこで、この共通のロジックをライブラリ化、あるいは部品化して、各ブロック内のcontroller.phpにいてライブラリ(部品)を利用しようと考え、以下の手順を行いました。

①/application/src ディレクトリ配下に /libraries ディレクトリを作成、/application/src/libraries 配下にhoge.phpを作成。
②作成したhogehoge.php にnamespace Application¥Src¥Libraries を指定し、Hogeクラスを記述し、Hogeクラスに上記共通処理をまとめた関数を記述。
③/application/config ディレクトリ配下にあるapp.php にて 'hoge' => '¥Application¥Src¥Libraries¥Hoge' を記述。
④/application/blocks 配下に作成した自作のfooブロックのcontroller.phpにて、use Application¥Src¥Libraries¥Hoge を記述し、HogeをnewしてHogeクラスの関数を利用。
⑤ブラウザにてfooブロックが埋め込まれたページにアクセス。

すると「Fatal error : Class '¥Application¥Src¥Libraries¥Hoge' not found」のエラーが出てしまいます。

手順が間違っているのか、そもそもhoge.phpを配置するディレクトリが間違っているのかを教えていただければと思います。

よろしくお願いします。

タグ:

Re: 複数のブロックで利用する共通のライブラリを作成する

2016年7月6日 at 6:26
こんにちは。
書かれている内容通りだとするとエラーは発生するはずがないのですが、
細かい記述が問題しているかもしれません。

ちなみに、下記はちょっと違います。

> ③/application/config ディレクトリ配下にあるapp.php にて 'hoge' => '¥Application¥Src¥Libraries¥Hoge' を記述。

app.phpに

-----
'aliases' => array(
'Hoge' => '\Application\Src¥Libraries\Hoge',
)
-----
とすると
-----
use Hoge;
-----
みたいに、namespace をフルパス(?)で書かなくても良いようになります。
ただ

> ④/application/blocks 配下に作成した自作のfooブロックのcontroller.phpにて、use Application¥Src¥Libraries¥Hoge を記述し、HogeをnewしてHogeクラスの関数を利用。

と use でフルパスを宣言されているので、不要です。

あと細かいところで、「\」の記号がきちんと正しい「\」なのかというのも気になります。
 

Re: 複数のブロックで利用する共通のライブラリを作成する

2016年7月7日 at 19:44
迅速な返信ありがとうございます。

ご指摘の通りapp.phpを見直してみたところ、

'Hoge'=>'¥Application¥Src¥Libraries¥Hoge'

とするべきところを

'hoge'=>'¥Application¥Src¥Libraries¥Hoge'

としてしまい、キーを小文字にしてしまったのが原因だったようです。

無事、共通処理も動作することができました。

ありがとうございました。