Класс '...' не найден в '...' |PHP - PullRequest
0 голосов
/ 09 июля 2019

Я уже просмотрел несколько ресурсов, и я почти уверен, что делаю так, как должно быть.Если только я не перегорел и не могу заметить точную ошибку.

Я работаю над проектом Simple REST API, который я могу построить с помощью PhalconPHP.Я следовал учебному руководству Micro с небольшими изменениями, где я разделяю вызовы базы данных в отдельный файл .service.php в папке \service, чтобы уменьшить количество кодов при реализации маршрута.Я не могу найти причину, по которой он выдает ошибку ниже, но я продолжаю получать ее:

Fatal error: Uncaught Error: Class 'MyAPI\App\Routes\v1\Test\Test1RouteService' not found in C:\xampp\htdocs\my-api\app\routes\v1\test\test_1_route.php:26 Stack trace: #0 [internal function]: Closure->MyAPI\App\Routes\v1\Test\{closure}() #1 C:\xampp\htdocs\my-api\index.php(46): Phalcon\Mvc\Micro->handle() #2 {main} thrown in C:\xampp\htdocs\my-api\app\routes\v1\test\test_1_route.php on line 26

ниже - это файлы, которые у меня есть в настоящее время (исключая .htaccess):

MyAPI\app\configurations\loader.php:

<?php

    #
    # Namespace Declaration
    #
    namespace MyAPI\App\Configurations;

    #
    # Use Namespaces
    #
    use Phalcon\Loader;


    $loader = new Loader();
    $loader->registerDirs(
        array(
            __DIR__ . '/app/configurations/',
            __DIR__ . '/app/models/',
            __DIR__ . '/app/routes/v1/test/',
            __DIR__ . '/app/services/v1/test/'

        )
    )->register();

?>

MyAPI\app\configurations\database.php:

<?php

    #
    # Namespace Declaration
    #
    namespace MyAPI\App\Configurations;

    #
    # Use Namespaces
    #
    use Phalcon\Di\FactoryDefault;
    use Phalcon\Db\Adapter\Pdo\Mysql as MySqlPDO;


    $di = new FactoryDefault();
    $di->set('db', function() {
        return new MySqlPDO(
            [
                'host'     => '127.0.0.1',
                'username' => 'root',
                'password' => 'd0r3m1f4s0',
                'dbname'   => 'test_db'
            ]
        );
    });

?>

MyAPI\index.php:

<?php

    #
    # Namespace Declaration
    #
    namespace MyAPI;

    #
    # Required Files
    #
    require 'app/configurations/database.php';
    require 'app/configurations/loader.php';

    #
    # Use Namespaces
    #
    use Phalcon\Mvc\Micro;
    use Phalcon\Http\Response;

    #
    # Route declaration and implementation
    #
    $app = new Micro($di);

    $app->notFound(function() use ($app) {
        $response = new Response();
        $response->setStatusCode(404, "Not Found");
        $response->setJsonContent([
            "status"  => 404,
            "message" => "The specified route was not found, or does not exist.",
            "data"    => null
        ]);

        return $response;
    });


    #
    # API Routes
    #
    require 'app/routes/v1/test/test_1_route.php';



    $app->handle();

MyAPI\app\routes\v1\test\test_1_route.php:

<?php

    #
    # Namespace Declaration
    #
    namespace MyAPI\App\Routes\v1\Test;

    #
    # Required Files
    #
    require 'app/services/v1/test/test_1_route.service.php';

    #
    # Use Namespaces
    #
    use MyAPI\App\Services\v1\Test;


    $app->get('/v1/test/what_is', function() {
        echo "My API";
    });

    $app->get('/v1/test/db_version', function() {
        // echo "called db_version route.";

        $service = new Test1RouteService();

        // echo $service->GetDbVersion();
    });

?>

MyAPI\app\services\v1\test\test_1_route.service.php:

<?php

    #
    # Namespace Declaration
    #
    namespace MyAPI\App\Services\v1\Test;

    #
    # Use Namespaces
    #
    use Phalcon\Mvc\Model\Resultset\Simple as Resultset;
    use Phalcon\Di\FactoryDefault;


    class Test1RouteService 
    {
        public function GetDbVersion()
        {
            // $sqlQry = "SELECT VERSION();";

            // $conn = FactoryDefault::getDefault()->get("db");

            return "done";
        }
    }

?>

я знаю, что могу или не могу реализовать что-то, как это должно было быть, я вернусь к этому позже.сейчас я хочу кое-что, с чего я могу начать.

РЕДАКТИРОВАТЬ: я использую PhalconPHP 3.4.3 и PHP 7.3.0

1 Ответ

0 голосов
/ 09 июля 2019

Кажется, я просто сгорел. Чтобы иметь возможность использовать класс в пространстве имен, содержащемся в другом классе, вы фактически должны указать конец пространства имен в объявлении.

т.е:.

use App \ Namespace1 \ Службы ;

, а затем

new Services \ ServiceClass ();

Боже мой, правда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...