0

Zendフレームワークで小さなテストを試みて、それがどのように機能するかを確認しています.モジュール調査を作成しました。さて、このコントローラー内に、1つ上のディレクトリにあるファイルを含めたいと思います。これを実行すると、

( ! ) Warning: require(../database.php) [<a href='function.require'>function.require</a>]: failed to open stream: No such file or directory in C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php on line 4
Call Stack
#   Time    Memory  Function    Location
1   0.0010  367280  {main}( )   ..\index.php:0
2   0.2738  5658600 Zend\Mvc\Application->run( )    ..\index.php:15
3   0.2780  5685104 Zend\EventManager\EventManager->trigger( )  ..\Application.php:297
4   0.2781  5685112 Zend\EventManager\EventManager->triggerListeners( ) ..\EventManager.php:208
5   0.2784  5686672 call_user_func ( )  ..\EventManager.php:464
6   0.2784  5686688 Zend\Mvc\DispatchListener->onDispatch( )    ..\EventManager.php:464
7   0.2785  5686688 Zend\Mvc\Controller\ControllerManager->get( )   ..\DispatchListener.php:90
8   0.2785  5686840 Zend\ServiceManager\AbstractPluginManager->get( )   ..\ControllerManager.php:114
9   0.2786  5686840 Zend\ServiceManager\ServiceManager->get( )  ..\AbstractPluginManager.php:110
10  0.2787  5687256 Zend\ServiceManager\ServiceManager->create( )   ..\ServiceManager.php:437
11  0.2787  5687288 Zend\ServiceManager\AbstractPluginManager->createFromInvokable( )   ..\ServiceManager.php:491
12  0.2788  5687704 Zend\Loader\StandardAutoloader->autoload( ) ..\ServiceManager.php:0
13  0.2788  5687760 Zend\Loader\StandardAutoloader->loadClass( )    ..\StandardAutoloader.php:217
14  0.2850  5694072 include( 'C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php' )  ..\StandardAutoloader.php:306

( ! ) Fatal error: require() [<a href='function.require'>function.require</a>]: Failed opening required '../database.php' (include_path='.;C:\php\pear') in C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php on line 4
Call Stack
#   Time    Memory  Function    Location
1   0.0010  367280  {main}( )   ..\index.php:0
2   0.2738  5658600 Zend\Mvc\Application->run( )    ..\index.php:15
3   0.2780  5685104 Zend\EventManager\EventManager->trigger( )  ..\Application.php:297
4   0.2781  5685112 Zend\EventManager\EventManager->triggerListeners( ) ..\EventManager.php:208
5   0.2784  5686672 call_user_func ( )  ..\EventManager.php:464
6   0.2784  5686688 Zend\Mvc\DispatchListener->onDispatch( )    ..\EventManager.php:464
7   0.2785  5686688 Zend\Mvc\Controller\ControllerManager->get( )   ..\DispatchListener.php:90
8   0.2785  5686840 Zend\ServiceManager\AbstractPluginManager->get( )   ..\ControllerManager.php:114
9   0.2786  5686840 Zend\ServiceManager\ServiceManager->get( )  ..\AbstractPluginManager.php:110
10  0.2787  5687256 Zend\ServiceManager\ServiceManager->create( )   ..\ServiceManager.php:437
11  0.2787  5687288 Zend\ServiceManager\AbstractPluginManager->createFromInvokable( )   ..\ServiceManager.php:491
12  0.2788  5687704 Zend\Loader\StandardAutoloader->autoload( ) ..\ServiceManager.php:0
13  0.2788  5687760 Zend\Loader\StandardAutoloader->loadClass( )    ..\StandardAutoloader.php:217
14  0.2850  5694072 include( 'C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php' )  ..\StandardAutoloader.php:306

ここにコントローラーファイルがあります

<?php

namespace Survey\Controller;
(require 'test.php');

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Config\Config;

class SurveyController extends AbstractActionController
{
    public function indexAction()
    {
         $plugin = $this->plugin('url');

    }

    public function addAction()
    {
    }

    public function editAction()
    {
    }

    public function deleteAction()
    {
    }
}

コントローラーと同じディレクトリにdatabase.phpを配置すると、コントローラーの同じコードが正常に機能します。1つ上のディレクトリにあるものを含めることができないのはなぜですか?これを修正する方法は?

4

1 に答える 1

1

index.phpZendSkeletonApplicationの を見てください。であるディレクトリ変更コマンドに注意してくださいchdir()

このコマンドは、PHP スクリプトの作業ディレクトリをアプリケーションの ROOT に設定します。したがって、スクリプトにファイルを含めたいときはいつでも、ファイルを相対的にリンクする必要があります。あなたの場合、これは問題を解決します:

include __DIR__ . '/../database.php';

ただし、ファイル名だけを見ると、本当に意図していないことをしていると思います。いくつかのデータベース パラメータを取得するためだけに、さらに別のファイル システムとのやり取りを行う必要はありません。この種の情報を入力する必要があります./config/autoload/database.local.php

次の方法で、コントローラーから配列構文を使用してパラメーターにアクセスできます。

$config   = $this->getServiceLocator()->get('config');
$dbParams = $config['dbParams'];  // or whatever you name it, default PHP Arrays
于 2013-02-07T07:42:12.410 に答える