Хорошо В данном контексте имеется ввиду удалили из темы профи. Ведь речь идёт именно про тот раздел. --- Добавлено --- Это не злобное обзывательство. Это невинная шутка. На самом деле это не так. Просто у человека Личная неприязнь ко мне. --- Добавлено --- Я никакой злобы или не навести к нему не чувствую и это не холивар о чём либо ну забанили ну и ладно. Я просто хочу дать понять что это было сделано из-за Личных мотивов, а не так как это пытаются обставить. --- Добавлено --- Просто человек на самом деле либо обманывает сам себя, либо пытается обмануть всех вокруг не верными утверждениями. Прямо бы взяли и написали. Тема удалена или перенесена по моим личным мотивам так как не считаю что пользователь Askanim достоин находится в нашем сообществе программистов. Поэтому отправил в раздел новичков ибо туда он редко (Я бы даже сказал крайне редко) заходит и там она ему не будет мозолить глаза.
какая разница, в каком разделе тема... если ты, конечно, пришел за мнением сообщества, а не за тем, чтобы повые#@$&ться, что твоя тема в пи$#@том разделе))
Нет! Дело не в этом я же написал зачем выдумывать читайте пожалуйста всё перед тем как давать мнение: Но конкретно я удалил всё в теме потому что не хочу чтобы новички и заходили видели то что я пишу чтобы начать задавать не нужные вопросы в теме где мне не интересно на них отвечать. И не хочу чтобы там на них отвечали. А в профи вероятность того что зайдёт новичок крайне мала. И об этом я тоже выше писал.
Нам впору создать раздел "Асканим и его виртуальные личности под гнётом модераторов". Дружок, ты уже по всем понятиям наговорил на бан, но я тебя терплю. Просто наблюдаю как ты сам себя компрометируешь.
Это лишь доказывает то что я сказал. У тебя ко мне Личная Неприязнь. Вот и всё. Что тут ещё можно сказать я всё сказал. --- Добавлено --- а это нелепо. Завуалированное маской вранья объяснение. Вот и всё и жирная точка .
Разделы для тех, кто ищет. А те, кто общается - сидят в "НОВЫХ СООБЩЕНИЯХ" и плевать на разделы))) не удобно по разделам лазить)
опять я проспал все восстание молодежи... . Даже тему не вижу теперь. Но, во всяком случае, из практики: если кандидат-июнь не знает что такое интерфейс, то с большой вероятностью не будет приглашен на собес
@Zuldek Хочешь узнать что я сделал? --- Добавлено --- Написал вот такой вот класс --- Добавлено --- PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 06.12.2017 * Time: 13:52 */ namespace router; class Router extends Rout { private $flag = ''; private $error = []; private $router_list = []; /* * Конструктор для валидации входящих данных * * */ public function __construct() { if (isset($_POST['flag'])) { if (empty($_POST['flag'])) { $this->error = ['type' => 'post_error', 'text' => 'ошибка пусто значение флага']; } else { $this->flag = trim($_POST['flag'], '#'); unset($_POST['flag']); $this->router_list = $this->getRouts(); if (empty($this->router_list)) $this->error = ['type' => 'post_error', 'text' => 'Отсутствуют маршруты в движке']; } if (empty($this->flag)) $this->error = ['type' => 'post_error', 'text' => 'ошибка ключ флаг empty']; } else { $this->error = ['type' => 'not_post']; } } private function getRouts () { if (!file_exists(__DIR__ . '/RoutList.php')) { return []; } include __DIR__ . '/RoutList.php'; return Rout::getPost(); } public function rout () { // Начнём работу нашего роутера if (!empty($this->error)) { if ($this->error['type'] == 'not_post') $this->redirect('/'); if ($this->error['type'] == 'post_error') $this->withJson($this->error); exit; } if (empty($this->router_list[$this->flag])) { $this->withJson(['type' => 'post_error', 'text' => 'маршрут не найден']); } if (empty($this->router_list[$this->flag])) $this->withJson(['type' => 'Ошибка нет такого маршрута']); // вызовим передаваемый контроллер $mcl = explode(':', $this->router_list[$this->flag]); if (empty($mcl[0]) and empty($mcl[1])) return $this->withJson(['type' => 'Ошибка нет такого маршрута']); if(is_callable(array($mcl[0], $mcl[1]))) { call_user_func_array(array(new $mcl[0], $mcl[1]), [new FRouter()]); } else { $this->withJson(['error' => 'Ошибка вызова экземпляра класса или ошибка вызова метода объекта. Смотрите Router List']); } // Закончим работу скрипта exit; } public function getRouterList () { if (empty($this->router_list)) return ['type' => 'error_router', 'text' => 'пустой список маршрутов роутера']; return $this->router_list; } public function redirect($uri) { header('Location: ' . $uri); exit; } private function withJson($array) { header('Content-Type: application/json'); echo json_encode($array); exit; } } --- Добавлено --- Это постелька для апи post запросов Там ещё куча файлов на ядро вот оно.
Там и интерфейсы и т.д Я всего лишь хотел узнать правильно ли я это реализовал и подвергнуть тему обсуждению среди профи. А не среди молодёжи --- Добавлено --- стёб не уместен. Смысл в чём. Я сделал пастельку, то есть теперь можно посылать все запросы через одну и ту же ссылку, не обязательно единую точку входа юзать. достаточно передть в посте параметр flag пример: Код (Javascript): $('#addComment').on('submit', function(event) { event.preventDefault(); set = {}; set.flag = '#add'; set.vendor_code = $(this).attr('data-vendor-code'); routerForm('/myrouter/', 'addComment', function (data) { console.log(data); }, set); }); --- Добавлено --- Вот так выглядит список маршрутов: PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 06.12.2017 * Time: 13:53 */ \router\Rout::post('add', \api\comment::class . ':add'); --- Добавлено --- Вот непосредственно сам обработчик я не стал выносить в модель я всё сделал в контроллере: PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 07.12.2017 * Time: 12:05 */ namespace api; use api\lib\Query; use facade\facadeRouter; class comment { private $error = []; public function add (facadeRouter $router) { $post = $router->getPost(); $insert_array = []; if (!empty($post['vendor_code'])) { $insert_array['vendor_code'] = $post['vendor_code']; } else $this->error = ['type' => 'error', 'name' => 'vendor_code', 'text' => 'не выбрано значение оценки']; if (!empty($post['rating'])) { $insert_array['rating'] = $post['rating']; } else $this->error = ['type' => 'error', 'name' => 'rating', 'text' => 'не выбрано значение оценки']; if (!empty($post['name'])) { $insert_array['name'] = $post['name']; } else $this->error = ['type' => 'error', 'name' => 'name', 'text' => 'Не заполнено имя']; if (!empty($post['comment'])) { $insert_array['comment'] = $post['comment']; } else $this->error = ['type' => 'error', 'name' => 'comment', 'text' => 'Не заполнен комментарий']; if (!empty($this->error)) return $router->withJson($this->error); $insert_array['image'] = 'img_this_img.jpg'; $last = Query::connect('my_comment')->insert($insert_array); return $router->withJson([$post, $last, 'type' => 'allow']); } } --- Добавлено --- а вот входящий index PHP: <?php define('ROOT', __DIR__); include __DIR__ . '/Psr4AutoloaderClass.php'; $loader = new Psr4AutoloaderClass(); // register the autoloader $loader->register(); // register the base directories for the namespace prefix $loader->addNamespace('facade', __DIR__ . '/facade'); $loader->addNamespace('api', __DIR__ . '/api'); $loader->addNamespace('router', __DIR__ . '/router'); $rout = new \router\Router(); $rout->rout(); --- Добавлено --- и всё чудненько работает Вот класс FRout PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 07.12.2017 * Time: 16:45 */ namespace router; use \facade\facadeRouter; class FRouter implements facadeRouter { public function getPost() { return $_POST; } public function withJson($array) { header('Content-Type: application/json'); echo json_encode($array); exit; } public function withHtml($path, $array) { ob_start(); extract($array, EXTR_PREFIX_SAME, "var"); include ROOT . $path; ob_end_clean(); } public function redirect($string) { header('Location: ' . $string); exit; } } А вот его шаблон(interface) PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 05.12.2017 * Time: 15:42 */ namespace facade; interface facadeRouter { public function getPost () ; /* * function Render HTML Template * * @array - var type array (); * * @return HTML template * */ public function withHtml ($path, $array) ; /* * function json render array * * @array - var type array (); * * @return not return, this exit script; * */ public function withJson ($array) ; /* * function redirect url * * @string - var type string * * @exit * */ public function redirect ($string) ; } --- Добавлено --- При чём честно говоря я interface и FRouter буду расширять ещё и ещё... Хочу сделать проверку на пустоту всех значений поста и делить их на разные массивы. Т. есть чтобы можно было получить полные и не полные посты в массиве. Думаю на выходных а мож не на выходных но в скором времени сделаю и не будет всей этой волосни нахрен: PHP: if (!empty($post['vendor_code'])) { $insert_array['vendor_code'] = $post['vendor_code']; } else $this->error = ['type' => 'error', 'name' => 'vendor_code', 'text' => 'не выбрано значение оценки']; if (!empty($post['rating'])) { $insert_array['rating'] = $post['rating']; } else $this->error = ['type' => 'error', 'name' => 'rating', 'text' => 'не выбрано значение оценки']; if (!empty($post['name'])) { $insert_array['name'] = $post['name']; } else $this->error = ['type' => 'error', 'name' => 'name', 'text' => 'Не заполнено имя']; if (!empty($post['comment'])) { $insert_array['comment'] = $post['comment']; } else $this->error = ['type' => 'error', 'name' => 'comment', 'text' => 'Не заполнен комментарий']; if (!empty($this->error)) return $router->withJson($this->error); --- Добавлено --- Есть ещё класс для сбора routList PHP: <?php /** * Created by PhpStorm. * User: Леонидэ * Date: 06.12.2017 * Time: 14:10 */ namespace router; class Rout { static private $router_list = []; static private $html = []; static public function post ($flag , $class) { static::$router_list[$flag] = $class; } static protected function getPost () { return static::$router_list; } } --- Добавлено --- Завтра залью на гит свой. С примером и html кой --- Добавлено --- и небольшой readme настряпаю.
Это конечно ахинея, и близко не вяжется валидация параметров с задачей роутера, но в своем проекте ты сам творец .
Да честно скажу, каждый контроллер начинается с одного и того же а если !empty($_POST[ВОТ ЭТО]) ТО.... Надоело не хочу не чё проверять хочу взял и они уже либо посланы со своей пустотой обратно, либо я их использую... --- Добавлено --- А я их в день пишу, тучи... Задолбало. День сурка блин с этим !empty На них тока тратится если посчитать наверно пару часов точно трачу тока на нописание этих проверок... Уфф...
Я пользуюсь Слим там такой фичи нет --- Добавлено --- Вроде как --- Добавлено --- И опять же это класс отдельный а это уже строчки не хочу не чё писать хочу сходу чтобы роутер сам сказал или пока или привет --- Добавлено --- Это же у меня не совсем роутер это для создания апи через пост простыню сделал. А в посте всегда данные идут осталось для маршрута указать какие валидируем а какие нет так наверное как нибудь сделаю --- Добавлено --- У меня есть либа для валидации входных данных но меня раздражает и ее писать
Причем тут миддлваре и проверка приходящих постов.... Миддлваре позволяет конечно взять и сделать на группу маршрутов проверку но опять 25 ее там писать да и не получится на каждый пост апи писать одну проверку... Так как в 90 из 100 % приходные данные разные. А проверяем на пустоту одинаково --- Добавлено --- Идея у меня совсем иная посмотри я предлагаю делить массив на входные данные на уровне роутера на массив с пустыми значениями и на массив где значения не пусты --- Добавлено --- Тут у нас плюшка если значения все полные то можно вообще на пустоту проверку не делать если же нет то сделаем проверку
Пишешь один раз класс middleware, который проверяет на empty-значения, и цепляешь его к роутам, где надо. Хотя, кстати, у тебя что, во всех 100% форм все поля required? Хотя, конечно, в ларке красиво сделано с вынесением валидации в класс запроса... Нафига поверх годного роутера slim писать свою поделку? --- Добавлено --- Кстати, твой facadeRouter по сути Request, а не роутер. Он ничего не маршрутизирует, он позволяет получать данные из запросов (ну насколько видно сейчас).
Это я накидал за один день что в голову быстро пришло, это не для слима. Я что дурак поверх слима лепить ещё роутер XD Это на тот случай если нет возможноси притянуть годный роутер. Я сделал чисто для апи постов заметил что если там не существует поста он редиректит?) Это для битрикса. Я туда впаял это, потому что с тем что есть у битрикса я не согласен работать и я обшился там в корнях у него своим классом перехватывая его запрос на myrouter и отправляю к себе на ядро --- Добавлено --- это специально я сделал чтобы не проверять линки я посылаю всё время на один и тот же url и уже указываю маршрут в передоваемом значении flag
@pinokio, у меня есть правило, которое не подводит - работая с какой-то CMS, я работаю по правилам этой CMS. Во-первых, так меня всегда быстро поймёт другой знакомый с ней программист, во-вторых, в случае чего можно пинать поддержку (особенно, если платный продукт). У ЮМИ, например, если ты что-то менял в ядре, ты (точнее, твой клиент) теряешь право на поддержку, хотя заплатил нехилые такие бабки. А пока ты следуешь правилам, поддержка может оказаться полезной. --- Добавлено --- Не лезть в чужой дом со своими порядками.
нет он и response отдаёт. Но код у меня простой он сильно не грузит да и работать будет стабильно да не функциональный но для временного дела подойдёт. да и если честно сказать скажу одно например в моём двиге уже более 100 маршрутов пост знаешь как уже там с комментариями к каждому почти читать его не удобно --- Добавлено --- нет увольте. Я не буду для добавления сраного комментария тащить всю библиотеку битрикса со всем её процедурным гавном. Чтобы запрос шёл как черепаха. И тут уже не в кеше дела или в оптимизации там просто куча говна --- Добавлено --- @mkramer не скажешь же что код хреново написан) И можно по другому написать я думаю я сделал всё в стандартах как и у всех просто функционала нет) Но это не роутер это класс для апи на один линк. Вот и всё.
Поэтому роутинг yii2 мне в чём-то нравится больше, чем PSR какой-то там. Если я напишу класс HrenController, а в нём метод actionHren, то Yii2 сам его найдёт по маршруту hren/hren, без моей помощи.