現在PHPの勉強中。
2023-06-21
どうも、氷翠です。
PHPといっても、Codeigniter4を勉強しています。最初はなかなかうまくいかず、だいぶ慣れてきたところです。
今まで「namespace」というのがいまいち理解できなくて、避けてきたのだけど、今回のCodeigniter4では標準なのでとりあえず使い方だけでも手探りだけど、なんとかできた。
ただ、最初にひっかかったのは、welcomeの画面は表示されたのだが、次の画面が出てこない。ということで、基本設定に問題があるんだろうと思ったのだが、やはり設定のファイルは結構な量あるw
そこで、「Config/Routes.php」の中に問題があるんじゃないだろうかと思って開いてみた。
/*
* --------------------------------------------------------------------
* Router Setup
* --------------------------------------------------------------------
*/
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
// The Auto Routing (Legacy) is very dangerous. It is easy to create vulnerable apps
// where controller filters or CSRF protection are bypassed.
// If you don't want to define all routes, please use the Auto Routing (Improved).
// Set `$autoRoutesImproved` to true in `app/Config/Feature.php` and set the following to true.
# $routes->setAutoRoute(false);
上の方はこんな感じになっているので、「$routes->setAutoRoute(false);」ここの「#」をとり、「false」を「true」に変更する。そうすることで同一クラスのもう一つの画面を表示させることに成功した。
氷翠はやはり頭がわるいのだろうか、一日かかったw
エラーの画面も独特な感じなので、ちょっと見づらかったのもあるけどね。
次に、今現在作成しているWEBアプリケーションでは、XMLファイルによってデータの保管をしているのをメインにしている。これは、まずローカルで使うことを目的としているため、マシンの移行などが起こった場合、またPHPをマシンに設定していかねばならないということと、どんなマシンの環境で動かすのか不安定だったということもあり、データはすべてXMLで保管することで、アプリケーションが変わっても対応しやすいのではないかということで。
ということで、以前から使用している「XMLBuilder」というライブラリを使用したい。しかし、Codeigniter4ではnamespaceが重要になっているので動きません。
そこで、メインになる「Builder.php」の最初に「namespace App\Libraries\xml;」を追加しておきます。これでとりあえずnamespaceを定義したことにはなるけどね。
でもこれだけではない。
このライブラリには「XMLReader」クラスと「XMLWriter」クラスが使われている。この二つはPHPのモジュールになるので、直接利用することになるのだが、ここでまたnamespaceの弊害が出てくる。
そこでそれぞれのクラスを呼び出すところを探し出し…
「$writer = new XMLWriter;」とか「$cursor = new XMLReader;」みたいなところ、「XMLReader::ELEMENT:」こんなような箇所がいくつかある。ここに\(バックスラッシュ)をつけておく。
「$writer = new \XMLWriter;」こんな感じになる。こうすることでnamespaceに対応させるのだ。
これでXMLデータも楽に扱うことができる。
と、同時にやっと進むw
コメントを残す