CodeIgniterを使用したSimpleTest - ファイルを識別しません - 変数はダイ?
-
29-09-2020 - |
質問
CodeIgniterでSimpleTestを使用して、 maroonbytes 。私はランプとNetBeans 6.9を使っています。
test.phpページは私のブラウザにロードされます。スタブテストが適所にあり、ドロップダウン選択に表示されます。実行しようとすると、2 PHPエラーが発生します。
メッセージ: include_once(/var/www/sparts3/main/tests/basic_test_v.php): ストリームを開くことができませんでした:そのようなファイルはありません ディレクトリ
メッセージ:include_once(): 失敗しました '/var/www/sparts3/main/tests/basic_test_v.php' ' 包含のために (include_path= '。:/ usr / share / php:/ usr / share / pear')
パスは間違っています - basic_test_v.php はサブフォルダ / tests / views です。
デバッガは test.php :
でこれを指していますfunction add_test($file, &$test)
.
何らかの理由でNetBeansはこの時点で$ fileの値を公開しません。これはそれが空であることを意味しますか?
私はすでにコード404ページが見つからないので、私はすでにコードを歓迎しました。デバッガがバリデータが失敗したことが発生していたようです。だから私は私の無知な方法で基準を追加しました(私はそれが処理された例外か何かであるべきだと確信しています):
if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START')
{ ... }
.
どうすればこれを解決することができますか? BTW、これは私の他のポスト。これを別々の質問にするのが最善のようでした。
更新1:私はWeb開発者アドイン(Firefox)を使用して投稿エントリーを試してきました。私はこれらがコードに誤解されていると思います。デバッグ中にいくつかの文字列変数を表示することにNetBeansがバンクされているようです。これはイライラする。
アップデート2:同じポイントのNetBeansで有効なコード処理が停止すると、変数の表示が停止しています。私は test.php を遅らせる。私は関数、 add_test($ file、&$ test)を通して渡ります。この機能はIFステートメントで開きます。それはうまく仕上げられ、私は変数を見ることができます。その後、新しいIFステートメント:
if (file_exists($implementation))
{
require_once ($implementation); ...
.
私がその行にあるとすぐに、2つのことが起こります:
- NetBeansの変数表示は空白になります スーパーグローバル を除く
- コードのように動作する $実装は空の変数 です。
これらの行のすぐ上のステートメントを追加しました:
$implementation = 'http://var/www/sparts3/main/tests/views/basic_test_view.php';
.
これは何も変わりません。ブラウザの出力は、NetBeans / XDEBUGを使用しているかどうかを同じかどうかです。
だからそれはPHP処理グリッチのように見え始めています。それらは存在しますか?診断の手がかりのみ、そして歓声がなく、デバッグする能力のないCIは私にとっては興味がないので、私はホストサービスのアップロードと試みを試みるかもしれません。
アップデート3:私はWAMP PC上ですべてを試しました。同じブラウザの結果(いくつかの「廃止予定」エラー、PHP 4とすることがあります。私はそのPCをデバッグできると思います(XDebugが機能している場合)、しかし点が少ないようです。
解決
basic_test_v.phpをbasic_test_view.phpに名前変更しましたか?コードはあなたのファイルを名前付きで右に保存することを期待しています。
アップデート1 (はいim退屈)
私はすでにコード行を喜ばせました それは私をコード404を過ぎてくれるからです ページが見つかりません。それはデバッガのようでした GETはバリデータが失敗していました。 だから私は私の無知に基準を追加しました 方法(私はそれが扱いにされるべきだと確信しています 例外または何か):
if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START') { ... }
.
どうすればこれを解決することができますか? BTW、これは私の解決を妨げました その他の投稿、私は更新します。 これを離散させるのが最善のようでした 質問。
この問題に対する「右」の解決策は次のとおりです。
$config['uri_protocol'] = "AUTO";
に$config['uri_protocol'] = "PATH_INFO";
を設定します
$config['enable_query_strings'] = FALSE;
への$config['enable_query_strings'] = TRUE;
config.php(それらの設定の上のコメントを読む、非常に役立ちます)
test.phpを深く見ると、テストファイルはこのように名前が付けられていることをお知らせします。
%name%_%TYPE%_test.php(%TYPE%は単数)
ここでより明確にする例:
ファイルのようなコントローラ歓迎されたように歓迎されています.php このコントローラのテストは welcome_controller _test.phpという名前の名前を付け、テスト/コントローラ/
に保存されます。test.phpスクリプトは、テストファイルとテスト済みファイルを自動的にロードしようとします。 しかし私の意見では修正する必要があります。
関数を変更しましたget_loader_idとadd_testのような
function get_loader_id($file, $type) {
$loader_id = str_replace("_{$type}_test.php", "", basename($file));
return $loader_id;
}
function add_test($file, &$test) {
$implementation = '';
if (preg_match('/_controller/', $file)) {
$controller = get_loader_id($file, 'controller');
$implementation = APPLICATION . 'controllers/' . $controller . '.php';
} elseif (preg_match('/_model/', $file)) {
$model = get_loader_id($file, 'model');
$implementation = APPLICATION . 'models/' . $model . '_model.php';
} elseif (preg_match('/_view/', $file)) {
$view = get_loader_id($file, 'view');
$implementation = APPLICATION . 'views/' . $view . '.php';
} elseif (preg_match('/_helper/', $file)) {
$helper = get_loader_id($file, 'helper');
$implementation = APPLICATION . 'helpers/' . $helper . '.php';
} elseif (preg_match('/_library/', $file)) {
$library = get_loader_id($file, 'library');
$implementation = APPLICATION . 'libraries/' . $library . '.php';
}
if (file_exists($implementation)) {
require_once ($implementation);
}
$test->addFile($file);
}
.
ファイル名規則をフォローしている場合は、すべて問題を維持する必要があります (Zend Server CE、Xdebug、SimpleTest、NetBeans 6.9のMacBookでテストしました6.9)
他のヒント
ロードしようとしているものがビューである場合は、$this->load->view('basic_test_view');
を使用しようとしましたか?