Задать вопрос
  • Правильно ли реализован класc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Пишу свою модель MVC


    а код привели контроллера. Да и в целом вы уже на этом этапе проигрываете. Не нужно даже пытаться разбираться с MVC, это конкретная реализация принципа разделения ответственности. Сначала стоит разобраться с принципом, лежащим в основе, а уже потом ковыряться с реализацией.

    и мне кажется что я делаю что-то не так и хочется его добить


    Давайте сначала по мелочам:

    if ( !defined( 'FILE_COMPILE' ) )

    убрать. Если вы собираетесь "конкатенировать PHP" - не делайте этого. Есть opcache.

    if ( !class_exists ( 'Controller' ) ) {

    composer и PSR-4 совместимая автозагрузка классов.

    class Controller extends UDAPI {

    Наследование классов (extends) - плохо (ну опять же в подавляющем большинстве случаев). Наследование типов (implements) - хорошо. Приучайте себя использовать наследование классов как крайнюю меру.

    Ну и опять же, что это за UDAPI от которого вы наследуете контроллер? Не выгоднее ли передать его в конструктор контроллера как зависимость?

    protected $uri;
        protected $params = array();
        protected $request = array();


    сделайте отдельный класс Request и инкапсулируйте работу с ним там.

    $this->uri = filter_input ( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL );
        $this->uri = trim ( $this->uri, '/\\' );
        $this->uri = urldecode ( $this->uri );
        $this->uri = parse_url ( $this->uri, PHP_URL_PATH );


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

    if ( $this->uri == '' )
            $this->redirect ( $this->config->root_uri . $this->default[ 'controller' ] . '/' . $this->default[ 'action' ], true );


    Почитайте про мидлвэры, про фронт-контроллеры, про Model-View-Adapter. Последняя схема куда лучше вписывается в модель HTTP сервера.

    public function ready ( ) {

    сделайте отдельный компонент - роутер. Кто-то (например фронт контроллер) должен просить роутер узнать какой контроллер дергать. И потом уже дергать этот контроллер. Не надо пихать все в одну хрень, тем самым вы нарушаете саму идею "разделения ответственности" пытаясь реализовать конкретную реализацию этого принципа.

    $this->setController ( array_shift ( $this->pattern ) );
    $this->setAction ( array_shift ( $this->pattern ) );


    Пара слов о состояние. Состояние это сложность. То есть посмотрев на переменную `$this->pattern` мы понятия не имеем что там хранится поскольку с течением времени его значение меняют. Причем зачем меняют - непонятно.

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

    call_user_func_array ( array ( $controller, $this->action ), $this->request );


    На дворе PHP7 между прочим.

    } else {
                echo '404 error';
              }


    раз уж начали - делайте всю обработку ошибок через исключения. Тут вам пригодится как раз фронт контроллеры и прочее.

    public function isController ( $controller ) {
        if ( is_dir ( SOURCE_DIR . '/controllers/' . $controller . '/' ) ) {


    ... PSR-4, классы... автозагрузка...

    public function getModel ( $controller ) {

    Для 2006-ого года в целом нормально, но это ж 10 лет назад.
    Ответ написан
    2 комментария
  • Как сделать так что-бы все данные сохранялись одной кнопкой сохранить?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    mysql_query

    Мы его теряем...

    Читать phpfaq.ru/pdo иначе все в классе отличниками станут
    Ответ написан
    Комментировать
  • Как здесь найти ошибку ?

    viktorvsk
    @viktorvsk
    Где здесь?
    Какую ошибку?
    Вам сюда, наверное.
    Ответ написан
    Комментировать