Вопросы по принципу работы my-first-cms

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

файлы взяты из GiHub: it-for-free/my-first-cms

1) Хотел бы лучше понять принцип работы данного конструктора и назначение самого массива data.
файл Category.php

    public function __construct( $data=array() ) {
      if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
      if ( isset( $data['name'] ) ) $this->name = $data['name'];
      if ( isset( $data['description'] ) ) $this->description = $data['description'];
    }

    public function storeFormValues ( $params ) {
      // Store all the parameters
      $this->__construct( $params );
    }

Предполагаю, что после проверки существования ключей массива data (id, name, description), соответствующим переменным класса присваиваются ключи массива data.

2) Хотел бы лучше понять назначение массива results Как взаимодействуют массивы data и result. И для чего передаются данные из одного массива во второй?

Хотел бы лучше понять данный код. Особенно последнюю строку:

файл admin.php

        $results['article'] = new Article;
        $data = Category::getList();
        $results['categories'] = $data['results'];
        require( TEMPLATE_PATH . "/admin/editArticle.php" );

Предполагаю, что в массиве results хранятся данные, которые выводятся на экран. В data записывается список категорий из БД при помощи PDO (ф-я getList()). Далее в массив results копируются данные из массива data.

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

после проверки существования ключей массива

-- существования не ключей, а наличие по ним конкретных значений (см. документацию по isset() https://www.php.net/manual/ru/function.i...).

И для чего передаются данные из одного массива во второй?

-- потому что второй массив хранит все данные, а первый лишь часть, условно говоря.

в массиве results хранятся данные, которые выводятся на экран. В data записывается список категорий из БД при помощи PDO (ф-я getList()). Далее в массив results копируются данные из массива data.

-- да, все так.

Подробнее на видео: https://youtu.be/x7N1OofbU5g

_____________
матфак вгу и остальная классика =)

Pavel1989's picture

по данному участку кода:
файл: editCategory.php

<?php if ( $results['category']->id ) { ?>
   <p><a href="admin.php?action=deleteCategory&categoryId=
<?php echo $results['category']->id ?>" onclick=
"return confirm('Delete This Category?')">Delete This Category</a>
  </p>
<?php } ?>

Хотел бы лучше понять формирование заголовка строки
"admin.php?action=deleteCategory&categoryId".
Предполагаю, что данная ссылка отображается в строке браузера
и указывает на файл admin.php,
далее на функцию deleteCategory() в этом файле. Особенно интересует "categoryId".

На примере работы со своим проектом в netBeans пришел к тому,
если в массиве results ключ будет назван category_id
(или как-то отлично от "categoryId",
то php выдаст ошибку в браузере "Undefined index: category_id"
c указанием конкретной строки.

vedro-compota's picture

Хотел бы лучше понять формирование заголовка строки

-- это не заголовок строки, а ссылка, просто в данном случае она дается относительно текущего доменного имени, это позволяет вам запустить код сайта с любым доменом.
Формируется она в данном случае просто конкатенацией строки - часть строки идет как фиксированные литералы, а изменяемые значения подставляются напр. из БД.

Предполагаю, что данная ссылка отображается в строке браузера

не в строке браузера, а в теле HTML-документа, который формируется php-скриптом, в адресной строке она отобразиться, когда вы на неё кликните и браузер перейдет на страницу, на которую она указывает.

и указывает на файл admin.php

-- да, это так, потому что здесь в данном случае в URL напрямую указывается входной файл скрипта (который уже потом подключается остальные файлы - вы это можете отследить по коду)

?action=deleteCategory&categoryId= .......далее на функцию deleteCategory()

В конечном итоге - да, будет вызывана deleteCategory(), НО: почему это так? на самом деле:
action=deleteCategory&categoryId=
-- это просто два GET параметра (вспомните что это - как их обрабатывать, почитайте) -- далее уже скрипт явно проверяет значения этих параметров, ожидая вполне конкретных имен, поэтому собственно и верно, то что вы написали далее:

то php выдаст ошибку в браузере "Undefined index: category_id"

--------

Особенно интересует "categoryId".

Что именно интересует? это просто второй GET-параметр, логика формирования ссылки - это конкатенация, а логика её разбора - опять же в коде.

_____________
матфак вгу и остальная классика =)