2014-03-30 30 views
1

所以我一直在閱讀大量的stackoverflow和phalcon論壇主題..(我開始討厭這個框架),但似乎沒有任何工作,它不'例如,解釋爲什麼像Laravel那樣。Phalcon路由器不會對子文件夾和命名空間聲明做出反應

我只是想能夠與該應用程序結構進行操作:

enter image description here

正如你看到的,我要的是用控制器命名空間中的子文件夾,以使更多的爲了我的代碼。

根據所有的解釋,這是我loader.php:

<?php 

$loader = new \Phalcon\Loader(); 

/** 
* We're a registering a set of directories taken from the configuration file 
*/ 
$loader->registerDirs(
    array(
     $config->application->controllersDir, 
     $config->application->modelsDir, 
     $config->application->pluginsDir 
    ) 
)->register(); 

據我所知,通過registerDirs使用時爾康應該穿越了找不到類的所有子文件夾。

然後我定義我的路線,以特定的控制器在基本目錄索引控制器的主要途徑後:

<?php 

$router = new Phalcon\Mvc\Router(false); 

$router->add('/:controller/:action/:params', array(
    'namespace' => 'App\Controllers', 
    'controller' => 1, 
    'action' => 2, 
    'params' => 3, 
)); 

$router->add('/:controller', array(
    'namespace' => 'App\Controllers', 
    'controller' => 1 
)); 

$router->add('/soccer/soccer/:controller', array(
    'namespace' => 'App\Controllers\Soccer', 
    'controller' => 1 
)); 

$router->add('/soccer/:controller/:action/:params', array(
    'namespace' => 'App\Controllers\Soccer', 
    'controller' => 1, 
    'action' => 2, 
    'params' => 3 
)); 

return $router; 

而且我的一個控制器的樣子:

<?php namespace App\Controllers\Soccer; 

use App\Controllers\ControllerBase as ControllerBase; 

class IndexController extends ControllerBase 
{ 

    public function indexAction() 
    { 

    } 

} 

有什麼不對嗎?默認的頂部命名空間沒有註冊?我錯過了什麼嗎?

這只是行不通的。當我嘗試打開myserver.com/soccer我希望去的app/controllers /足球/ IndexController.php,而是它告訴我:

SoccerController處理程序類無法加載

這基本上意味着它正在/ controllers目錄中尋找SoccerController.php,完全忽略了我的子文件夾定義和路由。

Phalcon 1.3.0

卡住了一個星期。任何幫助 - 非常感謝。

+0

呃..爲什麼我的線程得到了一個減號?我按照規則要求提供了關於我的問題和代碼塊的最詳細的解釋。 – deb0rian

+0

我不知道爲什麼,因爲它不是我,但如果你想猜測它是讓你的挫折滲透到你的問題,除了我同意,值得一加 – CodeMonkey

回答

4

我在加載控制器文件夾中的ControllerBase和其餘控制器時遇到了問題命名空間。我是有,因爲其他示例項目運行良好,我意識到,我錯過了在調度員聲明中的小細節,我本來是要setDefaultNamespace的

(參考:https://github.com/phalcon/vokuro/blob/master/app/config/services.php)很難

$di->set('dispatcher', function() { 

    $dispatcher = new Dispatcher(); 

    $dispatcher->setDefaultNamespace('App\Controllers'); 

    return $dispatcher; 
}); 

或者您也可以像這樣

$router->add("/some-controler", array(
    'namespace' => 'App\Controllers' 
    'controller' => 'some', 
    'action' => 'index' 
)); 

應該工作以及路由聲明文件直接指定它,它可能是在第一個有點混淆了命名空間,但一旦你會得到它的一個竅門,你會喜歡這個非常快的框架

1

您確定Phalcon在將目錄註冊到自動加載器時會遍歷子文件夾嗎?你有沒有嘗試添加一行到你的自動加載器,它明確加載了controllers\soccer目錄?

或者,如果您的足球控制器是命名空間,您還可以使用自動加載器註冊命名空間:"App\Controllers\Soccer" => "controllers/soccer/"

2

它看起來像你的命名空間有資金

應用程序\控制器\足球

和你的文件夾結構不

應用程序\控制器\足球

在我的應用程序中,我有控制器與命名空間和我剛剛嘗試更改文件夾的大小寫,以便它們不匹配,並且我得到缺少的類錯誤。

當然,它提出了一個問題,你計劃有多少個控制器讓它們的命名空間是值得的?你是按功能還是內容分組控制器和動作?我以前在Zend有很多控制器,但現在我已經按功能對它們進行了分組,我只有16個,我更加快樂。例如我懷疑足球,橄欖球,曲棍球等可能會分享體育控制器,文章,聯賽位置等將有很多共同的數據。

ps不要放棄Phalcon!根據我的經驗,它比任何其他PHP框架快得多,我用它值得忍受很多:)