Я бы создал класс Widget и дал бы ему методы edit (), new () и delete (). Тогда у вас может быть функция list (), которая создает массив экземпляров Widget. Я бы, вероятно, пошел дальше и создал бы класс WidgetList ( WidgetList.php ), даже если изначально он был просто оберткой вокруг массива.
Изначально у меня был бы Widget.php файл для класса и index.php для обработки различных запросов.
Я всегда проверяю, чтобы файлы, содержащие мои классы, имели то же имя, что и сами классы (обычно по одному на файл). Это упрощает определение местоположения и упрощает использование функции __ autoload .
Тогда у меня будет файл .htaccess для создания дружественных URL-адресов, которые отправляют различные типы запросов в index.php . Примерно так:
Options ExecCGI FollowSymLinks Includes MultiViews
RewriteEngine On
RewriteRule /new index.php?action=new
RewriteRule /edit/([0-9]+) index.php?action=edit&widget_id=$1
То, как вы выполняете URL, зависит от того, как ваши виджеты действительно будут работать.