Для небольших и простых проектов состоят из:
Sekeleton MVC использует архитектуру MVC, как следует из названия. MVC означает модель-контроллер. Модель-View-Controller-Википедия
Model:
The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.
View:
Any representation of information such as a chart, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.
Controller:
Accepts input and converts it to commands for the model or view.
example.com/shop/show-shoes/index.phpindex.php требуют автозагрузки (композитор) и глобальных помощников (подробнее об этом позже).index.php sendresponse () вызывает в экземпляре приложения $, который отправляет соответствующие заголовки и код состояния вместе с контентом, который отправляется обратно в браузер.Теперь вы понимаете, как структура справляется со всем этим. Ниже приведена документация для каждого класса и некоторые примеры, которые вы можете начать разработку.
YourAppApp : ваш кодControllers : все контроллерыModel : все моделиView : все просмотрыConfig.php : класс пользовательского конфигурацииCore : код Frameworkpublic : подвергаться в Интернетеindex.php : отправная точка приложения.htaccess : перенаправляет все запросы на index.phpassets : все статические активы, такие как CSS/JS, живут здесьstorage : скомпилированные виды, загруженные документы и т. Д.vendor : загрузка композитора необходимых библиотек В целом большинство фреймворков следует за конвешением по конфигурации пользователя, требуемой для параметров БД и пути просмотра и т. Д.
Пользовательская конфигурация живет внутри вашего каталога приложений в классе конфигурации. Открывая этот файл, вы увидите Config Class Extens BaseConfig ( core config), который внутренне определен в скелете. Большая часть конфигурации - это константы, некоторые могут быть статическими методами.
Этот класс задокументирован с помощью комментариев, поэтому проверьте его, и вы сможете выяснить всю конфигурацию самостоятельно.
Для конвенций маршрутизации используются по конфигурациям для Ex:.
Представьте себе, что хочу показать пост 3 ID маршрута
example.com/user-post/show-photos/3/paris
Приведенный выше пример есть
так что выше класса контроллера будет выглядеть как
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}Но вы можете спросить, что насчет /, /о и т. Д. Маршруты?
Эти маршруты автоматически направляются на default_controller (может быть изменен в конфигурации) по умолчанию SiteController, а / действие - по умолчанию метод индекса, который также может быть изменен в конфигурации.
Вы также можете заметить, что объект CoreRequest который всегда передается в качестве первого аргумента. Он содержит различных помощников для запроса (дополнительная информация в разделе запроса).
Запрос рассматривается как объект. Он будет передаваться с помощью Deacault к методу каждого контроллера, поскольку первый аргумент и другие параметры будут переданы после него в последовательности. бывший:
Для url example.com/user-post/show-photos/3/paris
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}Вот несколько удобных методов, предоставленных вам объектом запроса.
/* Check Method of request */
$ request -> isGet ();
$ request -> isPost ();
/*
How to get superglobals
These methods if provided returns specific field or entire array if no parameters are passed.
If field does not exits null is returned
*/
$ request -> query ( ' field ' ); // For GET
$ request -> input ( ' field ' ); // For POST
$ request -> server ( ' field ' ); // For SERVER
$ request -> files ( ' field ' ); // For FILES
$ request -> all (); // For FILES and POST merged Ответ, который необходимо отправить в браузер, может быть достигнут
view ( ' viewpath ' , $ data = []); // viewpath ex. phtots.show for Views/photos/show.php
view ([ ' header ' , ' content1 ' , ' content2 ' , ' footer ' ], $ data = []); // array alternative
json ( $ data = [], $ options , $ depth = 512 ); // Same as setting header("Contetnt-Type: text/json"); and using json_encode() Валидация вдохновлена Laravel, и предоставляются несколько основных и наиболее используемых правил.
$ errorMsgs = Core Validator:: validate ( $ request -> all (), [
" name " => [ " required " , " max:30 " ],
" mobile " => [ " required " , " digits:10 " ],
" photo " => [ " required " , " image:image/jpeg " , " max:100 " ],
]);Сообщения, сгенерированные Framework, просты, и вы можете настроить эти файлы внутри конфигурации. Бывший.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}В приведенном выше примере требуемое сообщение будет пользовательским.
Сбой, если поле остается пустым в соответствии с функцией php yate ().
Должно быть строковым значением.
Должен быть числовое или числовое строковое значение с заданным размером, если размер не указан, просто проверьте как числовое значение
Верно для да, нет, да, нет, верно, ложь, 0, 1 в противном случае неверно
Данные запроса должны содержать поле с тем же именем с суффиксом _confirmation. Пример: если он используется в пароле, он проверит для получения поля Passhore_confirmation
Будь то действительный идентификатор электронной почты или нет.
Проверьте, является ли это действительным загруженным файлом или нет
Проверьте, является ли это действительным изображением или нет. Разрешенные типы по умолчанию: Image/JPEG, Image/GIF, Image/PNG, Image/WebP, Image/SVG+XML, Image/BMP.
Будь то действительная дата, проходящая через функцию strtotime ()
Проверьте, равны ли оба даты или нет
Проверьте, наступает ли дата пользователя после данного.
Проверьте, наступает ли дата пользователя до данного.
Поле под валидацией и данный человек должен иметь разные значения.
Поле под валидацией и данный человек должен иметь одинаковые значения.
Поле под валидацией должно присутствовать, может быть нулевым или пустым.
Максимальное правило размера. Для
Число : число должно быть меньше или равна размеру.
Строка : длина должна быть меньше или равна размеру.
Массив : Подсчет элементов должен быть меньше или равна размеру.
Загруженный файл : размером файлов должен быть меньше или равна размеру.
Правило минимального размера. Ограничение так же, как и макс: правило размера .
Установите свои учетные данные базы данных и тип DB в файл конфигурации. Тогда вы всегда можете получить соединение, позвонив:
$ conn = Core Database:: getConnection (); // PDO instance Модель - это место, где будет проживать ваш бизнес, что также включает в себя логику, связанную с DB. Вот почему предоставляется несколько удобных методов:
// suppose
class User extends Model { /* Empty */ }
$ user = new App Models User ();
$ user -> find ( $ id , columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // Get single row
$ user -> all (columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // get all rows
$ user -> insert ( $ data ); // As associative array of column name and values
$ user -> update ( $ id , $ data ); // $id to be updated with $data
$ user -> delete ( $ id ); // Row to delete with $id Модель выведет название таблицы в виде формы во множественном числе Snake_case во множественном числе имени вашего класса. Таким образом, в вышеприведенном случае для пользователя класс будет пользователями, так же, как AppData будет App_Data, а галерея будет галереями. Вы можете определить свое собственное имя, переоценив свойство $table , так же, как $id считается первичным ключом по умолчанию и может быть переопределен.
class User extends Model
{
protected $ table = " my_table " ;
protected $ id = " tbl_id " ;
}Что -нибудь сложное, чем вы, чтобы сделать запросы самостоятельно. Бывший:
use Core Model ;
use Core Database ;
class User extends Model
{
public function deleteByName ( $ name )
{
$ sql = " DELETE FROM $ this -> table WHERE name=? " ;
return Database:: getConnection ()
-> prepare ( $ sql )
-> execute ([ $ name ]);
}
} Также для получения последнего идентификатора вставки вы можете сделать Database::getConnection()->lastInsertId() .