Задать вопрос
@nowaybuticanfly

Как настроить неймспейсы в фалконе?

Через registerDirs автолоадер все правильно подгружает, через неймспейсы отдаёт диспатч ошибку, не могу понять в чем проблема, путь задаётся один и тот же

код index.php
<?php

use Phalcon\Di\FactoryDefault;
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\Url;
use Phalcon\Db\Adapter\Pdo\Mysql;

// Define some absolute path constants to aid in locating resources
define('BASE_PATH', dirname(__DIR__));
define('APP_PATH', BASE_PATH . '/app');

// Register an autoloader
$loader = new Loader();

//$loader->registerDirs(
//    [
//        APP_PATH . '/controllers/',
//        APP_PATH . '/models/',
//        APP_PATH . '/modules/'
//    ]
//);

$loader->registerNamespaces(
    [
     'App\Controllers' =>   APP_PATH . '/controllers/'
    ]
);

$loader->register();


$container = new FactoryDefault();

$container->set(
    'view',
    function () {
        $view = new View();
        $view->setViewsDir(APP_PATH . '/views/');
        return $view;
    }
);

$container->set(
    'db',
    function () {
        return new Mysql(
            [
                'host'     => 'localhost',
                'username' => 'sammy',
                'password' => 'password',
                'dbname'   => 'learning',
            ]
        );
    }
);

$container->set(
    'url',
    function () {
        $url = new Url();
        $url->setBaseUri('/');
        return $url;
    }
);

$application = new Application($container);


    // Handle the request
    $response = $application->handle(
        $_SERVER["REQUEST_URI"]
    );

    $response->send();


код контроллера

<?php
declare(strict_types=1);
namespace App\Controllers;

use Phalcon\Http\Request;
use \Phalcon\Mvc\Controller;
use Phalcon\Http\Message\Uri;

class IndexController extends Controller
{

    public function indexAction()
    {
        return 'hi';
    }
}
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
t-alexashka
@t-alexashka
Сразу пишу legacy код
У меня вот так работает:

$loader = new Loader();

$loader->registerDirs([
    '../app/Controllers/',
    '../app/Models/',
    '../app/Libs/',
]);

$loader->registerNamespaces([
	'App' => '../app/',
]);

$loader->registerFiles([ '../vendor/autoload.php' ]);

$loader->register();


при условии структуры папок:

2 папки на одном уровне pub и app. файл index.php (в котором вышенаписанный код) лежит в pub/ вся логика в app/

pub/ (index.php)
app/ (controllers/, models/, etc)


А это пример самого контроллера

<?php

	/**
	*	Офис.Справка
	*/
	namespace App\Controllers\Office;
	
	use App\Models\Faq;
	use App\Models\FaqCats;
	use Phalcon\DI;
	
	class FaqController extends BaseController {

		public function initialize() {
			
			parent::initialize();
			
		}
      ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы