だから私は大量のstackoverflowとphalconフォーラムのスレッドを読んできました..(私はこのフレームワークが嫌いになり始めています)、何も機能していないようで、たとえばLaravelのように理由を説明していません.
私はこのアプリケーション構造で操作できるようにしようとしています:
ご覧のとおり、サブフォルダーで名前空間付きのコントローラーを使用して、コードをさらに整理するだけです。
すべての説明によると、ここに私の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();
私の知る限り、Phalcon は、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;
そして、私のコントローラーの1つは次のようになります。
<?php namespace App\Controllers\Soccer;
use App\Controllers\ControllerBase as ControllerBase;
class IndexController extends ControllerBase
{
public function indexAction()
{
}
}
ここで何が問題なのですか?デフォルトの最上位名前空間が登録されていませんか? 何か不足していますか?
これはうまくいきません。app/controllers/soccer/IndexController.php に移動する予定の myserver.com/soccer を開こうとすると、代わりに次のように表示されます。
SoccerController ハンドラー クラスを読み込めません
これは基本的に、/controllers ディレクトリで SoccerController.php を探しており、サブフォルダーの定義とルートを完全に無視していることを意味します。
ファルコン 1.3.0
これに1週間立ち往生。どんな助けでも - 大変感謝しています。