質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

1回答

583閲覧

fuelの画面表示について

r4325t2

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2018/01/25 08:07

前提・実現したいこと

特定のページを開こうとした時に、エラーが表示されます。
E_STRICTの警告メッセージだそうですので、 &$result を \stdClass $result に変更すると警告はでなくなります。
と教えていただいたのですが、fuelを直接いじっちゃうとマズイと言われたので、設定とかで何とかならないでしょうか
テストを任されてるだけなんですが、これがそもそもバグなんでしょうか?
なにか分かる方いましたら、宜しくお願いします!

発生している問題・エラーメッセージ

Fuel\Core\PhpErrorException [ Warning ]:
Declaration of Orm\Query_Temporal::hydrate(&$row, $models, &$result, $model = NULL, $select = NULL, $primary_key = NULL) should be compatible with Orm\Query::hydrate(&$row, $models, stdClass $result, $model = NULL, $select = NULL, $primary_key = NULL)

PKGPATH/orm/classes/query/temporal.php @ line 0

試したこと

そもそものやり方が間違ってる可能性もあるので、行った手順も載せておきます。
①ローカルのリポジトリにclone
②developブランチを作成、最新のdevelopをpull
③vagrant up
④ssh接続して、php oil r migrate -v=0、php oil r migrateを実行
⑤テスト対象のブランチに移動

こんな感じです…

補足情報(FW/ツールのバージョンなど)

Vagrant + VirtualBoxでWindows上に開発環境
FuelPHP 1.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

fuelを直接いじっちゃうとマズイと言われたので、設定とかで何とかならないでしょうか

テストを任されてるだけなんですが、これがそもそもバグなんでしょうか?

本番環境のPHPバージョンが低いのであれば、バグではありません。
しかし、本番環境もPHP7なのであれば、クリティカルバグとして扱わなければなりません。
設定では変更できません。

テストだけなのであれば気にする必要はないと思いますが、ソースを直接直さないで修正する方法は非常に面倒です。普通はフレームワークを直接直さないで、クラスメソッドを上書きする方法でコアクラスを修正します。しかし、パッケージの場合は、コアクラスを拡張するやり方と同じ方法ではできません。

普通は、名前空間やクラス名を変える方法で対応します。新しいパッケージにまとめてもOKです。
app/classes/Fixed/Orm/Query/Temporial.phpなどとファイルを作って、あとはブートストラップで読み込みます。使用するときは異なったクラス名を呼ばなければなりません。

app/bootstrap.php

php

1//... 2\Autoloader::add_classes(array( 3 //... 4 'Fixed\Orm\Model_Temporal' => APPPATH.'classes/Fixed/Orm/Model/Temporial.php', 5 'Fixed\Orm\Query_Temporal' => APPPATH.'classes/Fixed/Orm/Query/Temporial.php', 6)); 7//...

app/classes/Fixed/Orm/Model/Temporial.php
※ Ormパッケージの該当クラスを丸ごとコピーして下記個所を書き換えます。

php

1namespace Fixed\Orm; 2 3class Model_Temporal extends \Orm\Model 4{ 5 //... 6 public static function query($options = array()) 7 { 8 //... 9 $query = \Fixed\Orm\Query_Temporal::forge(get_called_class(), static::connection(), $options) 10 ->set_temporal_properties($max_timestamp, $timestamp_end_name, $timestamp_start_name); 11 //... 12 13 return $query; 14 } 15 //... 16}

app/classes/Fixed/Orm/Query/Temporial.php
※ Ormパッケージの該当クラスを丸ごとコピーして下記個所を書き換えます。

php

1namespace Fixed\Orm; 2 3class Query_Temporal extends \Orm\Query 4{ 5 //... 6 7 public function hydrate(&$row, $models, \stdClass $result, $model = null, $select = null, $primary_key = null) 8 { 9 if( is_subclass_of($model, '\Orm\Model_Temporal')) 10 { 11 $primary_key[] = $this->timestamp_start_col; 12 $primary_key[] = $this->timestamp_end_col; 13 } 14 parent::hydrate($row, $models, $result, $model, $select, $primary_key); 15 } 16}

そして、クラスを上書きした\Fixed\Orm\Model_Temporalをロードします。

php

1class Model_MyTemporal extends \Fixed\Orm\Model_Temporal 2{ 3 //... 4}

投稿2018/01/25 13:43

Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問