2013-09-16 3 views
0

Как мне require_once в моем контроллере, в третьем классе, который я положил в kohana\vendor\twitter-api-php? Я пробовал this answer, который был похож, но я продолжал получать ошибки (см. Ниже). Файловая структура моего проекта заключается в следующем:Требование порождает ошибки в Kohana v3.3.1

kohana 
- application 
- modules 
- system 
- vendor 

я получаю эти ошибки

Warning: Uncaught exception 'ErrorException' with message 'require_once(C:\wamp\www\kohana): failed to open stream: Permission denied' in C:\wamp\www\kohana\application\classes\Controller\Twitter.php:8 Stack trace: #0 C:\wamp\www\kohana\application\classes\Controller\Twitter.php(8): Kohana_Core::error_handler(2, 'require_once(C:...', 'C:\wamp\www\koh...', 8, Array) #1 C:\wamp\www\kohana\application\classes\Controller\Twitter.php(8): Controller_Twitter::before() #2 C:\wamp\www\kohana\system\classes\Kohana\Controller.php(69): Controller_Twitter->before() #3 [internal function]: Kohana_Controller->execute() #4 C:\wamp\www\kohana\system\classes\Kohana\Request\Client\Internal.php(97): ReflectionMethod->invoke(Object(Controller_Twitter)) #5 C:\wamp\www\kohana\system\classes\Kohana\Request\Client.php(114): Kohana_Request_Client_Internal->execute_request(Object(Request), Object(Response)) #6 C:\wamp\www\kohana\system\classes\Kohana\Request.php(986): Kohana_Request_Client->execute(Object(Request)) #7 C:\wamp\www\kohana\index.p in C:\wamp\www\kohana\application\classes\Controller\Twitter.php on line 8 

и эту ошибку

Fatal error: Controller_Twitter::before(): Failed opening required '' (include_path='.;C:\php\pear') in C:\wamp\www\kohana\application\classes\Controller\Twitter.php on line 8 

Вот мой код

<?php defined('SYSPATH') or die ('No direct script access.'); 

class Controller_Twitter extends Controller { 

    public function before() 
    { 
     // require_once(APPPATH.'vendor/twitter-api-php/TwitterAPIExchange.php'); 
     require_once Kohana::find_file('vendor/twitter-api-php', 'TwitterAPIExchange'); 
    } 

    public function action_index() 
    { 

     $view = new View('twitter/index'); 
     $this->response->body($view); 
    } 
} 

ответ

2

Поместите vendor папка внутри папке application.

Расположение на application, modules и system папки могут быть установлены в index.php и будет храниться в постоянных APPPATH, MODPATH и SYSPATH. Kohana :: find_files() будет выглядеть в APPPATH, затем во всех загруженных модулях под MODPATH (ok, модули могут быть расположены в любом месте, но я предполагаю, что они все под MODPATH в вашем случае) и, наконец, SYSPATH. Kohana :: find_files() не будет волшебным образом смотреть где-нибудь еще.

Кроме того, почему бы не поставить require_once за пределы класса defenition? Как это.

<?php defined('SYSPATH') or die ('No direct script access.'); 

// require_once(APPPATH.'vendor/twitter-api-php/TwitterAPIExchange.php'); 
require_once Kohana::find_file('vendor/twitter-api-php', 'TwitterAPIExchange'); 

class Controller_Twitter extends Controller { 

    public function action_index() 
    { 
     $view = new View('twitter/index'); 
     $this->response->body($view); 
    } 
} 
+0

+1 большое спасибо. Это сработало! Очень полезный ответ. – Anthony

Смежные вопросы