Можно ли при процедурном подходе к построению движка сделать ЧПУ url?
Сделал по урокам движек для блога
как дошел до создания ЧПУ, задался вопросом, можно ли вообще это реализовать.
Если, кто-то сталкивался с этой задачей, подскажите как быть
Сервис авторизации Это библиотека или Приложение?
И где вообще граница между приложением и библиотекой?
Какие методы может содержать в себе библиотека авторизации?
и в идеале мой namespace должен строится как:
lib\<имя поставщика>\< namespace>\< имя класса>.... >
с точки зрения проекта это было бы лаконично, понятно и удобно в функциональном плане
PS: использовать composer не планирую, все библиотеки будут писаться мной, но планируется что для данной CMS системы могут разрабатываться сторонние модули и плагины.
В проекте есть строгая классификация папок, грубо говоря классы модуля должны быть в папке с названием модуля внутри папки modules.....
небольшие пояснения о том что подразмевается под modules | components | plugins
каждый элемент системы как и сама система будут реализованы на основе MVC
Нужно ли бросать исключение, в случаях, когда данные не прошли валидацию?
Или достаточно просто занести код и сообщение ошибки в массив errors и при выводе работать с ним?
Полезна ли информация с Исключений при валидации во время дебагга?Да, так вы получаете stacktrace, помимо сообщения об ошибке.
Работа с ошибочными данными может вызвать ошибку непосредственно при их обработке.
public function loginAction(Request $request) : Response
{
try {
$userName = $request->request->get('userName');
$password = $request->request->get('password');
Assert::assert($userName, 'userName')->match('/^[\a-z\d]{3,32}$/i');
Assert::assert($password, 'password')->lengthBetween(6, 32);
} catch (\Throwable $exception) {
return new Response($exception->getMessage(), Response::HTTP_BAD_REQUEST);
}
try {
// Your business logic here
return Response();
} catch (\Throwable $exception) {
$this->get('logger')->error($exception->getMessage(), ['exception' => $exception]);
return new Response('Could not login', Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
Последние год полтора пишу продакшен в основном на Laravel.
Собственно в последнее время мне стало скучно и решил я поискать себе приключений на свою точку.
Глянул курс по JAVA SE (синтаксис, пару либ), куда двигаться дальше?
Что посоветуете попилить в качестве тестового проекта, чтобы посмотреть, что вообще можно реализовать?
Как вы считаете, такой подход приемлимый, или быдлокодинг в квадрате?
$task->start("'; DROP TABLE " . PREFIX . '_tasks');
<?php
// Не стоит использовать глобальные И суперглобальные переменные.
// Лучше в принципе забудьте про их существование.
// В начале обработки сформируйте Request и уже далее с ним работайте.
// Вы данные на входе даже не проверяете, это ужасно
$uname = $_REQUEST['user_name'];
$upass = $_REQUEST['user_pass'];
// Это уже прошлое, mysql_*** НЕ поддерживается.
mysql_connect("localhost", "root", "12345678");
mysql_select_db("orders");
// см. выше на счет суперглобальных переменных.
$user_ip = $_SERVER['REMOTE_ADDR'];
// Почитайте про PSR и забудьте про существование однострочных управляющих конструкций
if ($_SERVER['HTTP_X_FORWARDED_FOR']) $user_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
if ($user_ip=="127.0.0.1")
{
// Авторизация по ip, вы серьезно?))
echo "Добрый день Администратор<br>";
}
else
{
// Что будет, если отправить $upass="';DROP TABLE users; SELECT '1" ?
// Это называется sql инъекция
// Параметры подставляются по другому
$sqlQuery = "SELECT * FROM users WHERE uname='$uname' and upass='$upass' and `real`=1";
$result = mysql_quеry($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
// Не используйте присваивания в условиях
if ($user = mysql_fеtch_array($result));
{
echo "Здравствуйте ".$user['fio']."<br>";
}
else
{
echo "Я вас не знаю"; exit;
}
}
// см. выше на счет суперглобальных переменных
if ($_REQUEST['search'])
{ // Выводим результаты поиска
echo "Результат поиска: <br>";
$search_name=$_REQUEST['search'];
// Что будет, если отправить $search_name="';SELECT CONCAT(uname, ' ', upass) AS info FROM users" ?
// тоже sql-инъекция
// и входящие данные вы не проверяете
$sqlQuery = "SELECT * FROM forms WHERE satus='$search_name'";
$result = mysql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
while ($one_form = mysql_fetch_аrray($result))
{
echо $one_form['info']."<br>";
}
}
echo "<form>Введите поиск: <input type=text name='search'><input type=submit></form>".;
?>
/**
* @property TYPE_HERE VAR_NAME_HERE [DESCRIPTION]
*/
П.С. Код не мой, переписать не хочется, так как есть много проектов на этом движке.