2014-08-28 15 views
2

我想在ZF2中創建一個庫,並且真的發現它很繁瑣和困難。我的圖書館將用於執行圖像任務,沒有前端輸出。儘可能多地閱讀,我已經完成了以下過程。Zend Framework 2使用我自己的庫和名稱空間混淆

  1. 創建:的mylibrary.php

    vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php 
    
  2. 內容:

    <?php 
    
    namespace mylibrary; 
    
    class mylibrary { 
    
    } 
    
  3. 補充:

    "autoload": { 
        "psr-0": {"mylibrary\\":"vendor/mycompany/mylibrary/library/mylibrary/"} 
    } 
    

    composer.json

  4. 然作曲:

    `sudo php composer.phar update` 
    

    ,並沒有錯誤,autoload_namespaces.php獲取與新的命名空間更新:

    return array(
        'mylibrary\\' => array($vendorDir . '/mycompany/mylibrary/library/mylibrary'), 
        'Zend\\' => array($vendorDir . '/zendframework/zendframework/library'), 
        'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'), 
        'ZendPdf\\' => array($vendorDir . '/zendframework/zendpdf/library'), 
    ); 
    
  5. 補充:

    use mylibrary;

    IndexController.php

    ,並試圖將類實例:

    public function indexAction() 
    { 
    
        $mylibrary = new mylibrary(); 
        // .... etc etc 
    

我得到一個錯誤:

Fatal error: Class 'mylibrary' not found in /the/root/to/my/site/module/Application/src/Application/Controller/IndexController.php on line 22 

請可有人看看我做了什麼,也許告訴我怎麼可以實例化我的類沒有這個錯誤?

在此先感謝

回答

1

簡短的回答是你的圖書館類是在mylibrary命名空間,因此你的use聲明應該改變,以反映... ...

use mylibrary\mylibrary; 

另一種方法是省略使用說明和使用FQCN實例類

$mylibrary = new \mylibrary\mylibrary(); 
0

你不應該在vendor手動創建文件。如果您希望能夠與其他應用程序共享您的磁帶庫,請創建文件以及相應的composer.json。將庫放在它自己的源代碼控制庫中,然後使用composer將它安裝到主應用程序中。

1

我建議你使用ZFTool創建一個新的模塊(這是一個庫是如何被調用的時候ZF2), 假設你使用Git和你已經安裝的Git的bash,你可以做跟隨

"require": { 
    "php": ">=5.3.3", 
    "zendframework/zendframework": "2.3.*", 
    "zendframework/zftool": "dev-master", 
}, 
  • 運行PHP composer.phar更新。

  • 要在項目中創建一個新的模塊,從控制檯,cd到項目的根目錄並運行

./vendor/bin/zf.php create module MyModule

或鍵入-v看到所有可用的選項

./vendor/bin/zf.php -v

這樣做會使模塊的結構正確並自動註冊到應用程序。它將在應用程序模塊目錄內創建。

  • 爲了確保一切正常,你可以創建一個簡單的路線和控制器,所以開YourZFSkeleton /模塊/ YourNewModule /配置/ module.config.php並添加遵循
 

    namespace MyNewModule; 

    return array(
     'view_manager' => array(
      'template_path_stack' => array(
       __NAMESPACE__ => __DIR__ . '/../view', 
      ), 
     ), 

     'controllers' => array(
      'invokables' => array(
       __NAMESPACE__ . '\Controller\Index' => __NAMESPACE__ . '\Controller\IndexController', 
      ), 
     ), 

     'router' => array(
      'routes' => array(
       __NAMESPACE__ => array(
        'type' => 'Literal', 
        'priority' => 1000, 
        'options' => array(
         'route' => '/example', 
         'defaults' => array(
          'controller' => __NAMESPACE__ . '\Controller\Index', 
          'action'  => 'index', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ); 

而你的模塊

 

    namespace MyNewModule\Controller; 

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

    class IndexController 
     extends AbstractActionController 
    { 
     public function indexAction() 
     { 
      return new ViewModel(); 
     } 
    } 

的控制器DIR和視圖腳本MyNewModule /視圖中IndexController.php /我的新模塊/索引/ index.phtml

Hello world!

你可以看到它在行動訪問

http://yourSiteUrlOrVhost/example 

我沒有測試此代碼,可能包含錯誤或遺漏:/

正如已經勸,從未編輯裏面什麼供應商目錄,它包含由作曲家自動下載的依賴關係。

如果您願意,您可以爲您的模塊創建一個新的回購站,然後使用作曲家將其添加到廣告依賴項中。

希望這會有所幫助!

相關問題