Как использовать пространство имен в ситуации с фронтальным контроллером с помощью PHP - PullRequest
1 голос
/ 12 ноября 2010

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

  • URL-адрес
  • htaccess перенаправляет в index.php, который запускает фреймворк
  • фреймворк анализирует маршрут и определяет, какой контроллер / действие нужно создать и запустить
    • фронт-контроллер фреймворка - «Контроллер», а контроллеры проекта расширяют «Контроллер»

Таким образом, чтобы разрешить имена контроллеров, например:

class Foo extends Controller {}

и позже модель будет:

class Foo extends Model {}

Моя структура каталогов выглядит так:

project/
    controllers/
        foo.php
    models/
        foo.php

Итак, мне, очевидно, нужно реализовать пространство имен. (И да, я использую PHP 5.3). Поэтому мой вопрос заключается в том, как именно мне реализовать пространство имен, где передний контроллер и модель расширяются другими контроллерами и моделями?

Ответы [ 2 ]

0 голосов
/ 21 мая 2013

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

public function __construct( $controller, $model )
{
    $this->controller = 'Application\Controllers\\' . $controller;
    $this->model      = 'Application\Models\\'      . $model;
}

Возможно, существует более автоматический способ сделать это, но я думаю, что этого будет достаточно в большинстве случаев.Не цитируйте меня, но, возможно, вы могли бы использовать Reflection и получить пространство имен вызываемого объекта.Однако для этого может потребоваться более уникальное соглашение об именах, иначе автозагрузчик все равно не узнает, звоните ли вы Controllers\Index.php или Views\Index.php.

0 голосов
/ 12 ноября 2010

Всегда проверяйте php.net ... http://php.net/namespace

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