gofuelphp1.8でViewやControllerにアクセスができません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,509

ccan

score 5

前提・実現したいこと

fuelphp1.8での開発をすることになったのですが、公式ドキュメントのビューに説明にあるhomeと言う下記のエラーが発生してしまいサンプルプログラムを動かすことができません。

Welcomのページの出力はできましたが新しいソースコードがうまく動いてくれない状況です。

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

Warning!

Fuel\Core\PhpErrorException [ Warning ]:
array_merge(): Argument #2 is not an array
COREPATH/classes/asset.php @ line 116

111        {
112            \Errorhandler::notice('Asset with this name exists already, cannot be overwritten.');
113            return $exists;
114        }
115
116        static::$_instances[$name] = new \Asset_Instance(array_merge(static::$default_config, \Config::get('asset'), $config));
117
118        if ($name == 'default')
119        {
120            static::$_instance = static::$_instances[$name];
121        }

Backtrace

COREPATH/bootstrap.php @ line 103
COREPATH/classes/asset.php @ line 116
COREPATH/classes/asset.php @ line 95
COREPATH/classes/asset.php @ line 180
APPPATH/views/welcome/404.php @ line 6
COREPATH/classes/view.php @ line 244
COREPATH/classes/view.php @ line 260
COREPATH/classes/view.php @ line 631
COREPATH/classes/presenter.php @ line 324
COREPATH/classes/presenter.php @ line 341
COREPATH/classes/response.php @ line 382
DOCROOT/index.php @ line 113

該当のview

ソースコード元

<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
Welcome, <?php echo $username; ?>.
</body>
</html>

該当のController

ソースコード元

class Controller_Home extends Controller
{
public function action_index()
{
$data = array(); // ビューに渡す変数を格納

$data['username'] = 'Joe14';
$data['title'] = 'Home';

// ブラウザに出力するビューを割り当てる
return View::forge('home/index', $data);
}
}

試したこと

1.fuelphp-1.8のダウンロードをzipとoil create する方法両方で試しました。
2.app/config.phpを日本語環境に合わせた状態で実行,デフォルトのまま実行
3.profilingをtrueにして実行
4.security.output_filterがnullになっていないか確認
5.asseet.phpの変更がないことの確認(新しいfuelphpのasset.phpと本体のasset.phpをdiffで比較)

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

構成
PHP 5.6.26-2+deb.sury.org~xenial+1 (cli) 
Apache/2.4.18 (Ubuntu)
fuelphp-1.8

Prior Contents (show)の表示(2重になっている?)

class Controller_Home extends Controller
{
public function action_index()
{
$data = array(); // ビューに渡す変数を格納

$data['username'] = 'Joe14';
$data['title'] = 'Home';

// ブラウザに出力するビューを割り当てる
return View::forge('home/index', $data);
}
}
class Controller_Home extends Controller
{
public function action_index()
{
$data = array(); // ビューに渡す変数を格納

$data['username'] = 'Joe14';
$data['title'] = 'Home';

// ブラウザに出力するビューを割り当てる
return View::forge('home/index', $data);
}
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kunai

    2016/10/11 10:40

    config/asset.php を修正されていませんか?内容提示いただけると助かります。

    キャンセル

  • ccan

    2016/10/11 11:44 編集

    ありがとうございます。app/config/asset.phpは存在せず、core/config/asset.phpは変更せずです。fuelphp本体を言語設定周り等のconfig.phpを変更しあとはダウンロードしてそのまま動かしているような状態です。

    キャンセル

  • nnssn

    2016/10/11 16:21

    もう一度、デフォルトで用意されているアクション、welcome/indexやwelcome/helloを閲覧するとどうなりますか?このエラー内容だとどのアクションも表示できなさそうな気もするのですが。

    キャンセル

  • ccan

    2016/10/11 16:56 編集

    welcome/indexやwelcome/helloを閲覧することは可能でした。
    profilingの設定のミスをしていたのでapp/config/config.phpのprofilingをtrueにした場合のエラーメッセージが発生したようです。ここの部分の質問は削除しておきます。

    キャンセル

回答 1

checkベストアンサー

0

正直まだ、全く当たりも付いてないのですが、手狭な修正依頼欄で続けるのも難しいので解答欄に書きます。

array_merge(): Argument #2 is not an array

エラーの発生場所はAsset::forge、array_mergeに渡されている第二引数がarrayじゃないう
という内容のようですね。その第二引数はというと

new \Asset_Instance(array_merge(static::$default_config, \Config::get('asset'), $config));

\Config::get('asset')になっています。ここには、app/config/asset.phpがあればそれを、なければcore/config/asset.phpが読み込まれるはずです。そうなると、このasset.phpの返り値(中身)がarrayになっていないのでは?と思ったのですが...

welcome/helloを閲覧できるか確認していただいたところ、そちらは問題ないとの事なので分からなくなってしまいました。welcome/helloのviewでもAssetクラスが使われているので、asset.phpに問題があれば同じエラーが発生するはずです。


あと一点気になったのはトレースにpresenter.phpの名前があることです。

COREPATH/classes/presenter.php @ line 324
COREPATH/classes/presenter.php @ line 341

質問文のコントローラを見る限り、Presenterクラスは使用していないようなので不思議です。もしかしたら、なんらかの理由で他のアクションが実行されている可能性も?

解決につながるかは分かりませんが、config/asset.phpの中身がreturn array()の形式になっているか、welcomeコントローラにアクションを追加した場合どうなるか、追加ファイルのパーミッションあたりも確認されてみてはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/13 13:29

    回答ありがとうございます。

    返信が遅れてしまって申し訳ありません。
    環境構築からやり直してみて、権限の付与もおこなったのですがやはり同様の結果となってしまいました。
    おかしなところかはわかりませんがエラーページのPrior Contentsの表示が2重になっていました。この部分を本文に追記しておきます。

    よろしくお願いいたします。


    キャンセル

  • 2016/10/13 18:18

    config/route.php でルーティングをいじっている可能性とか、公開ディレクトリの.htaccessでリダイレクトする条件をいじっている可能性とかないですか? それで意図しないアクションが実行されるとか。

    キャンセル

  • 2016/10/13 21:07 編集

    m6uさんのルーティングというご指摘で気づいたのですが、実行されているのはサンプルで初期設定されている_404_、Controller_Welcome::action_404みたいですね。Presenterクラスも使われていました。というわけでこのトレース結果は、home/indexアクションを発見することができなくてwelcome/404を実行、その過程でなぜかconfig/asset.phpを読み取ることができなくてエラー発生という内容のようです。

    (追記:手元の環境でAssetクラスを改変してarray_mergeの第二引数にnullを渡す、存在しないアクションを開いて404ページを開くで、質問文と同じトレース結果になりました。config/asset.phpを改変した場合はまた違う結果でした)


    閲覧ページのuriが/path/to/home/indexになっているか、Controller_Homeクラスがfuel/app/controller/home.phpに設置されているかを今一度確認してみてください。適切に配置しているのに開けないとしたら、作成したコントローラのパーミッションや.htaccessあたりの再確認も同様にお願いします。

    キャンセル

  • 2016/10/14 00:09

    Apacheの設定や権限、.htaccessも含めもう一度初期設定から行ったところエラーなく表示されました。ubuntuの設定にも慣れていないのでもしかしたらこの過程での原因を作ってしまったのかもしれません。

    まだ自分の技量では細かい原因まで追うことはできませんがとても参考になりました。ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる