Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found

Filed in Laravel5 | php Leave a comment

結論:psr-0とpsr-4で読み込み方が違うのでそれ用の指定をcomposer.jsonに追加してあげると解決した。

なんとphpの話題

Laravel5というのを触り始めまして、もうこれがなんだかハッピーな感じの作りになっているんで自宅でも触って練度高めていこうというモチベーションがあるんです。大変に珍しいことです。
最近のphp開発とはこうなんですというエッセンスがあるので、時代から取り残されていた部分を一挙に取り返さないといかん、と思っております。名前空間とかトレイトとか、よく分かってないけどそういうやつね。

で、ちょうどFlaskで作りかけて放置していた物があったので、それをLaravel5で移植してみます。
Laravel5 + Twig + React + Stylus + webpack といった感じ。いまどきのアレコレてんこ盛り。
Reactはまだよく分かってないが、webpackでStylusをコンパイル?すると、jsの中にcssの表現も一緒に入っちゃって、なんかもんげー感じです。ファイルの分割の機能がwebpackにはあるので、cssファイルとして別途吐き出させることも可能なはず。そこまでは理解が進んでないのでまたこんど。

さて掲題の件。
さいしょこそ普通に

こういうかんじでLaravel5にTwigを組み込み、使ってました。
が、たぶんartisanコマンド使ったあたりで突如、

FatalErrorException in ProviderRepository.php line 150: Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found

こんなエラー発生。ほんとに突然です。前後でcomposer.jsonを書き換えたとかもなかった(はず)。
あまりにも急なことだったので、寝ぼけてファイルの移動でもやらかしたかとオロオロしたりとか。vendorディレクトリとcomposer.lockをまるっと消してcomposer installで再構築してみても症状が変わらない。まったく意味がわかんなかったんですが、Laravel5本か、どっかのブログか、qiitaでみた記述をふと思い出しました。
いわく、何か一つでもPSR-4形式でのモジュール読み込みをした瞬間から、特に指定がなければLarabel全体がPSR-4で動作するものとしてなんとかかんとか。
うろ覚えなんで話半分で。
さしあたりそのぼんやりしたヒントを手がかりにして、ぐぐります。
「psr-0 psr-4 php」とか「composer.json psr-4 autoload」とか、雑なキーワードですが、仕方ない。何も分かってない状態。

不思議とヒット

探してみるといろいろ出てきます。

あら、これなんじゃないの?

psr-0とpsr-4以外記述方法に違いはありませんが、設定値の意味が変わっています。
ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog

ほう。ほうほう。どうせ意味分かってないのだしということで、書き方を真似してみます。

さあどうだ。画面をリロードしてみます。

Whoops, looks like something went wrong.

ウープスじゃねえよぶっ飛ばすぞ。
あ、そうだアレやんないと。

composer dump-autoload

リロード。
はい、解決ですよかった。
かなりラッキーパンチで解決したからよかったようなものの、あたしには難しかったよ。
ともあれ、これで開発の続きができるというものです。よかった。

かんけいないけどGistって便利ね。なんだこれ。

記事中にあるLaravel5本とはこれのこと。

, , , ,

phpのmakeでコケる

Filed in php Leave a comment

ローカルにVirtualBoxアレして、サーバ作ってんの。
php5.5.8を入れたろうと思ってあれこれ中
ざくっとmake test

ext/standard/basic_functions.o: In function `zm_startup_basic’:
/tmp/php-5.5.8/ext/standard/basic_functions.c:3648: undefined reference to `zm_startup_password’
ext/standard/basic_functions.o:(.rodata+0xae0): undefined reference to `zif_password_hash’
ext/standard/basic_functions.o:(.rodata+0xaf4): undefined reference to `zif_password_get_info’
ext/standard/basic_functions.o:(.rodata+0xb08): undefined reference to `zif_password_needs_rehash’
ext/standard/basic_functions.o:(.rodata+0xb1c): undefined reference to `zif_password_verify’
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_CTX_use_certificate_chain_file@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_CTX_set_verify@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `ASN1_STRING_type@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `CRYPTO_free@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_get_shutdown@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_get_verify_result@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `d2i_PKCS12_fp@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `EVP_cleanup@OPENSSL_1.0.0′

もういやじゃー
なんなのじゃー

メモ:いまのとこのconfigure
./configure –with-mysql –enable-cgi –with-openssl –with-zlib –with-curl –with-config-file-path=/etc –enable-opcache=no

短い。
なーんかcurlとopensshで転ぶんだよなー。めんどくさい。

(解決済)fuelphpセットアップ時に怒られる(Error – date_default_timezone_get(): It is not safe to rely on the system’s timezone settings.以下略)

Filed in fuelphp | php 2 Comments

タイトル長すぎか。まあいいか。
VPSに適当にphp5.5.8(mysql,openssl,enable-cgiが有効)を放り込み、fuelphpをセットアップしております。

oilでアプリケーションを生成するあたりで、最後に
php composer.phar update
こんなのやりますな。すると
Writing lock file
Generating autoload files
Error – date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in COREPATH/classes/fuel.php on line 161

はあ。
最初はたんにphp.iniがないんで怒られてたんですが、php.iniを設置し、date.timezoneの値をセットしてあげてもこの症状が変わらない。
どうもあちこち見た感じ、php.iniに書いても空で初期化されてphpが開始してしまっているみたいな感触。
ちなみに近くにある設定箇所の
;date.default_latitude = 31.7667
;date.default_longitude = 35.2333
;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333

このへんは、コメントアウトされているにもかかわらずなんか値を保持している状態。
気持ち悪くてかなわない。

いささか消極的な解決法

なんだかfuel.phpで死んでるようなので、
fuel/core/classes/fuel.php
の先頭あたりに以下を記述。
date_default_timezone_set(“Asia/Tokyo”);

やだなあこういうの……。
嫌なのはまああれですが、怒られなくなったのでいったんこれで進めることに。
試し書きでphpinfoとか書いて上げるようなノリの一枚物でも、こういう処置を講じてあげないとだめなのかいな。めんどくさい。

根本的に解決しました

コメント欄参照というと簡単すぎですが、コンパイル時に指定されているphp.iniの位置に、ただしくphp.iniが置かれていないことが原因でした。
あたし/etc/php.iniにおいてたんだけど、phpinfo確認したら

Configuration File (php.ini) Path /usr/local/lib

とあるわけよ。
やんなっちゃうよね。
/usr/local/lib/php.ini
に設置しなおし、php-cgiの再起動(nginxから使うので)して解決。
お騒がせしました。

,

php array_shift

Filed in php Leave a comment

$a = array();

$a[5] = "5 banme";
$a[4] = "4 banme";
$a[0] = "0 banme";
$a[1] = "1 banme";
$a[2] = "2 banme";

print_r($a);
print(array_shift($a));

そもそもこういうデータを作ったやつを殴るのが先ではあるけど、諸事情あんだよ。現実は色々と散らかってて汚いものなんだ。
で、まあ、察しついたかも知んないけど、結果は、

Array
(
    [5] => 5 banme
    [4] => 4 banme
    [0] => 0 banme
    [1] => 1 banme
    [2] => 2 banme
)

5 banme

というわけで、一番最初に突っ込んだ奴が先頭なんだな。この場合には、配列をこさえた際のインデックス番号にはなんの意味もない。意味ないどころかreset()されて台無しだ。

PHP: array_shift – Manual

mixed array_shift ( array &$array )

array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。 数値添字の配列のキーはゼロから順に新たに振りなおされますが、 リテラルのキーはそのままになります。

なので、

$a = array();
$a[5] = "5 banme";
$a[4] = "4 banme";
$a[0] = "0 banme";
$a[1] = "1 banme";
$a[2] = "2 banme";

sort($a);
print_r($a);
print(array_shift($a));

こうしてsort()いれてみる

Array
(
    [0] => 0 banme
    [1] => 1 banme
    [2] => 2 banme
    [3] => 4 banme
    [4] => 5 banme
)

0 banme

納得するであろう形になった。インデックス番号だと思ってたけど添字なんだなコレ。
いやーよかった。

     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *

うそなんだなー

$a = array();
$a[5] = "AAAAA";
$a[4] = "BBBBB";
$a[0] = "CCCCC";
$a[1] = "DDDDD";
$a[2] = "EEEEE";

sort($a);
print_r($a);
print(array_shift($a));

インデックスの番号と中身を組み替えた図。

Array
(
    [0] => AAAAA
    [1] => BBBBB
    [2] => CCCCC
    [3] => DDDDD
    [4] => EEEEE
)

AAAAA

AAAAAは$a[5]だったはずの中身です。
中身でソートしちゃうよねー

こういうときはksort()をつかうんでした。

$a = array();
$a[5] = "AAAAA";
$a[4] = "BBBBB";
$a[0] = "CCCCC";
$a[1] = "DDDDD";
$a[2] = "EEEEE";

ksort($a);
print_r($a);
print(array_shift($a));

これで、

Array
(
    [0] => CCCCC
    [1] => DDDDD
    [2] => EEEEE
    [4] => BBBBB
    [5] => AAAAA
)

CCCCC

一件落着。さて殴りにいこうか。

久々にphp &= ってなんだよの巻

Filed in php Leave a comment

php自体は久々どころではなく日々さわって涙を流しているわけですが。

php -r "$a = true; $a &= true; echo $a;"
1
php -r "$a = true; $a &= false; echo $a;"
0
php -r "$a = false; $a &= false; echo $a;"
0
php -r "$a = false; $a &= true; echo $a;"
0

どっかでfalseが一度でも入ったらfalseなんじゃな。

マニュアルにもあった。

See the Arithmetic Operators
Assignment    Same as:
$a += $b     $a = $a + $b    Addition
$a -= $b     $a = $a - $b     Subtraction
$a *= $b     $a = $a * $b     Multiplication
$a /= $b     $a = $a / $b    Division
$a %= $b     $a = $a % $b    Modulus

See the String Operators
$a .= $b     $a = $a . $b       Concatenate

See the Bitwise Operators page
$a &= $b     $a = $a & $b     Bitwise And
$a |= $b     $a = $a | $b      Bitwise Or
$a ^= $b     $a = $a ^ $b       Bitwise Xor
$a <<= $b     $a = $a << $b     Left shift
$a >>= $b     $a = $a >> $b      Right shift

人の書いたソースにこういうのがあってね。
なんだろうと思ったわけ。

php:array_filter

Filed in php Leave a comment

phpの話題。
ご存知array_filter。第一引数のみだとリストの中身をざっと見てfalseな値を取り除く。
こんなのを食わせてみる。

$a=array('000',"00","0",'0',0,null,false);
print_r(array_filter($a));

結果:

Array
  (
    [0] => 000
  )

シングルクオートは展開しないままなので文字列と判定して云々。
みたいな感じ。
きもい。癖がわかってれば便利だけど暗黙的でしこりを残すプログラムになる気がする。

Yiiに役立つリンク

Filed in php | Yii Leave a comment

役立つというかいつも見てるところ。自分用。

Yii初心者のための基本的なことまとめ

Yii 公式ガイド

Yii actionAdminのsearch-formとCGridViewで悪戦苦闘

Yiiを使う
Yiiを少しまじめに学習してみる:ユーザ認証とRDBの利用

ドロップダウンが作れない

Filed in php | Yii Leave a comment

連日、phpフレームワークのYiiさわってます。
多分基本的なところに勘違いがあるためなんだろうけれども、フォームの作成でつまづいています。
ユーザ情報を登録するフォームで、例えば血液型のドロップダウンリストがあるとする。血液型のリストは血液型テーブルから取ってくるとする。
こんな単純なことが解決できない。秒殺だろう普通。
foreachとかで作るぶんにはいいんですが、フォームビルダみたいなのがあって、そいつを通そうと思うとダメですね。手がかりを見つけられない。

ガイドの日本語記事が本家にあってありがたいんですけど、どこか飛ばし気味というか、言わなくても分かるだろう部分は書かない的なスタンスにある感じがします。どのファイルのことかわかってるだろうから、このコード断片がどこに書かれるのかは言わないよというような。
類推しながら読むことを強要されるのですごい疲れます。

できれば後日にコレを読み返して、くだらない勘違いでストレスためてたなーバカだなーと笑える日が来て欲しい。
あーイライラする。

追記:
愚痴ると直後に解決の糸口を発見してかっこわるいの法則。

フォームビルダを使う
これの下のほうだ。よかった。
かっこ悪いがいつものことなので気にしない。

ポップな見た目に騙されるな。Yiiはゴツい

Filed in php | Yii Leave a comment

いきなり他サイトの記事の紹介です。
RadioAge.Comさんによる、
Yiiを使う
Yiiを少しまじめに学習してみる:ユーザ認証とRDBの利用
Yiiによる本サイトの作り方メモ

この神記事がなかったら、こんなフレームワークに手を出したことを死ぬほど悔やみ、これって時代についていけてない兆候なんだろうという未練を引きずりつつヨロヨロと生きるところでした。
あぶない。

普段なら表組みでtr,th/tdの一組をくるくる回すテンプレート書いちゃうところを、ウィジェット使ってphpの部品として書かせるという点は、とくにこのフレームワークにおいて信じがたい、理解しがたいところなんじゃないかと思います。
少なくとも、テーブルやdl,ulの類をくるくるしたいんだけどという疑問をお持ちの時に、公式サイトの「ビュー」をいくら眺めても解決しません。

いったんテーブルなりリストなりが出来上がって出力されると、ソートやページングまでが書きだされた「よく使うタイプの一覧表」になっていることがわかり、ここまで至れて尽くせるためにCActiveDataProviderとかいう訳の分からんものを作る羽目になったのであるかと納得する仕掛けになっています。
凄いと感嘆しそこまでやるのかと呆れる次第。ほんとうに凄いと思う。

一方でちょっと心配になっちゃうのは、プログラマとデザイナーが分業の場合のコストは非常に高い作りなんじゃないのかなという点です。きょうびphp(perl/ruby/pythonなんでもいい)のコードがまるでわかんないですというデザイナーさんもそうそういないだろうけれども、Widgetつうのがありましてーとか説明するのは大変にだるい。
今回のあたしみたいに作るのぜんぶ自分一人というケースにおいてすら、
「テンプレ眺めただけでは出力後の一覧表の作りが一切想像できない」
というところに戸惑いを感じずにはいられないわけです。とくにテーブルを組むときに使うであろうzii.widgets.grid.CGridViewにおいては。
zii.widgets.CListViewでテンプレート指定した場合(‘itemView’=>’_view’)でも、ここからさらに_view.phpを追いかけないことにはループ一回分の中身がわからない。

「プログラマとデザイナーが分業の場合のコスト」と上で書きましたが、正確には「意思疎通がスムーズでないチームにおいてのコスト」と言い換えるべきなのかも。
ここはコレコレのウィジェット使うねーはいはいーで通じる間柄であれば大したコストではなさそうです。関わる人みんながYiiについての理解があるというケースね。
まっとうな人で構成された小規模なチームでの作業には効きそうという感じ。
人月でどうのこうのじゃとやっとる我らがSIerさんの世界では、まあなんつうか、名前だけ知ってればいいよね的ポジションのフレームワークなんでないかと思います。

当初、Yii+Twigでつかうことを考えてたんです。
Giiあたりのcrud画面まで吹っ飛ぶ(自分でいじってあげないといけない)ことを鑑み、忘れることにしました。
はー。生PHPだ。

あとは、本気の本気でCSSいじるか、ほぼいじらずにデフォルトのまま作ってなんとかなっちゃう場合には有効な選択肢足りえるかな。デフォルトのCSSのボリューム事態は実に大したことないので、いじるといってもそんなオオゴトでもないか。

読み返してみるとすごい悪口言ってるように見えますが、これはこういうものとして捉えて見ると、優れたフレームワークの気配は感じています。
CodeIgniterみたいなとっつきやすさはないです。変態さんFWかコレって思うほどです。
が、やりくりして書きだされた画面を眺めると、はーこりゃ楽だすごいなという感想を抱かずにはおれません。

YiiのGiiで403「You are not allowed to access this page.」

Filed in php | Yii Leave a comment

プロジェクト立ち消えにつき研修やる必要がなくなった。
フー

Yiiもさわりはじめた。アレコレ親切なのはすごい。すごいが、いざというときに邪魔になったりしないだろうなという不安も。
Web画面からcrud一発作成は便利だなー
こういうのはじめて触ったんだけど感動しますね。

自機じゃなくてLAN内の鯖にスクリプトを置いたため、giiを動かす際に手間取りました。
「You are not allowed to access this page.」なんていわれて403返されちゃう。
えー403?動いてるけど403ってーと?

'gii'=>array(
	'class'=>'system.gii.GiiModule',
	'password'=>'pAsSwOrD',
	// If removed, Gii defaults to localhost only. Edit carefully to taste.
	'ipFilters'=>array('127.0.0.1','::1','192.168.0.*'),
),

こんなんでいけた。

,

TOP