初心者がFuelPHPで動的リンクを張ってみた
前回のFuelPHPの記事でスタートアップは完了したのですが、FuelPHP+mod_rewriteでのURI指定は把握したけれど、リンクをうまく貼れない!というところで少し詰まってしまいましたので、記事にしておきます。
動的なリンクアンカーの生成
今回はbootstrapを使用しつつ、ナビゲーションバーをheaderとして共通で読み込んでいます。ブランドロゴ部分では最初、次のようにリンクアンカーを貼っていました。
<a class="brand" href="admin">charag Admin</a>
一見うまく動作するようにも思えるのですが、相対リンク指定となってしまう為、下層であるroot/admin/storydb/からロゴを選択すると、localhost/~eveningsun/charag/public/admin/storydb/adminに移動しようとしてしまい、404エラーが発生します。
FuelPHPでは動的なリンク生成を行ってくれるHtml::anchorを使用し、下記のように記述するのが正解のようです。
<?php echo Html::anchor('admin', 'charag Admin', array('class' => 'brand')); ?>
階層構造の定義
Html::anchorを使用すると、並列なcontroller構造に対しても、構成図のような階層構造を定義することができます。
/fuel/app/config/routes.phpの内容を次のように編集します。
return array( '_root_' => 'admin/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'admin/storydb' => 'storydb/index', 'admin/storydb/add' => 'storydb/add', );
このように左辺に名前、右辺に実際の指定位置を定義することでHtml::anchorを次のように使用できました。
<?php echo Html::anchor('admin/storydb', 'storydb'); ?> <?php echo Html::anchor('admin/storydb/add', 'addstory'); ?>
これで擬似的な階層構造(つまりエイリアス?)をどんどん定義することができますね。変数を渡すような場合は右辺でさらにarrayを使用するようですが、今回は解説を省略します。
mod_rewriteを設定済みの場合
リンク自体は問題なく動作するようになりましたが、既にmod_rewriteを設定しているにもかかわらず、初期設定のままだと、上記で生成されたリンクにpublic/index.php/adminという風にindex.phpが含まれてしまいます。
これを解決するために /fuel/app/config/config.phpを編集します。
/** * index_file - The name of the main bootstrap file. * * Set this to false or remove if you using mod_rewrite. */ 'index_file' => false,
コメントにもありますが、mod_rewriteを設定した人は、falseを定義するか、設定自体を削除すれば良いようです。
以上でFuelPHPの基本的な動的リンク生成については終了です。これからDBへデータを追加するためのFormにも挑戦していく予定のため、また問題や難しい箇所があれば記事にしていこうと思います!