За последние 24 часа нас посетили 17973 программиста и 1700 роботов. Сейчас ищут 1527 программистов ...

..!!..

Тема в разделе "PHP для новичков", создана пользователем askanim, 8 дек 2017.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
     
  2. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    С нами с:
    25 июл 2016
    такие дела...​
     
  3. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Хорошо
    В данном контексте имеется ввиду удалили из темы профи. Ведь речь идёт именно про тот раздел.
    --- Добавлено ---
    Это не злобное обзывательство. Это невинная шутка. На самом деле это не так. Просто у человека Личная неприязнь ко мне.
    --- Добавлено ---
    Я никакой злобы или не навести к нему не чувствую и это не холивар о чём либо ну забанили ну и ладно. Я просто хочу дать понять что это было сделано из-за Личных мотивов, а не так как это пытаются обставить.
    --- Добавлено ---
    Просто человек на самом деле либо обманывает сам себя, либо пытается обмануть всех вокруг не верными утверждениями. Прямо бы взяли и написали. Тема удалена или перенесена по моим личным мотивам так как не считаю что пользователь Askanim достоин находится в нашем сообществе программистов. Поэтому отправил в раздел новичков ибо туда он редко (Я бы даже сказал крайне редко) заходит и там она ему не будет мозолить глаза.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    какая разница, в каком разделе тема...
    если ты, конечно, пришел за мнением сообщества, а не за тем, чтобы повые#@$&ться, что твоя тема в пи$#@том разделе))
     
    Fell-x27 нравится это.
  5. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Нет! Дело не в этом я же написал зачем выдумывать читайте пожалуйста всё перед тем как давать мнение:
    Но конкретно я удалил всё в теме потому что не хочу чтобы новички и заходили видели то что я пишу чтобы начать задавать не нужные вопросы в теме где мне не интересно на них отвечать. И не хочу чтобы там на них отвечали. А в профи вероятность того что зайдёт новичок крайне мала. И об этом я тоже выше писал.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Нам впору создать раздел "Асканим и его виртуальные личности под гнётом модераторов".

    Дружок, ты уже по всем понятиям наговорил на бан, но я тебя терплю. Просто наблюдаю как ты сам себя компрометируешь. :D
     
    Dimon2x и runcore нравится это.
  7. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Это лишь доказывает то что я сказал. У тебя ко мне Личная Неприязнь. Вот и всё. Что тут ещё можно сказать я всё сказал.
    --- Добавлено ---
    а это нелепо. Завуалированное маской вранья объяснение. Вот и всё и жирная точка .
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Разделы для тех, кто ищет.
    А те, кто общается - сидят в "НОВЫХ СООБЩЕНИЯХ" и плевать на разделы)))
    не удобно по разделам лазить)
     
    Fell-x27 нравится это.
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    На меня же за тоже самое наехал ....

    Второй асканим, сиррюализм на техническом форуме ...
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    это не второй, а первый)
     
  11. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    опять я проспал все восстание молодежи... . Даже тему не вижу теперь. Но, во всяком случае, из практики: если кандидат-июнь не знает что такое интерфейс, то с большой вероятностью не будет приглашен на собес
     
    #36 Zuldek, 8 дек 2017
    Последнее редактирование: 8 дек 2017
  12. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    @Zuldek Хочешь узнать что я сделал?
    --- Добавлено ---
    Написал вот такой вот класс
    --- Добавлено ---
    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 06.12.2017
    6. * Time: 13:52
    7. */
    8.  
    9. namespace router;
    10.  
    11.  
    12. class Router extends Rout
    13. {
    14.     private $flag = '';
    15.     private $error = [];
    16.     private $router_list = [];
    17.     /*
    18.      * Конструктор для валидации входящих данных
    19.      *
    20.      * */
    21.     public function __construct()
    22.     {
    23.         if (isset($_POST['flag'])) {
    24.             if (empty($_POST['flag'])) {
    25.                 $this->error = ['type' => 'post_error', 'text' => 'ошибка пусто значение флага'];
    26.             }
    27.             else {
    28.                 $this->flag = trim($_POST['flag'], '#');
    29.                 unset($_POST['flag']);
    30.                 $this->router_list = $this->getRouts();
    31.                 if (empty($this->router_list)) $this->error = ['type' => 'post_error', 'text' => 'Отсутствуют маршруты в движке'];
    32.             }
    33.             if (empty($this->flag)) $this->error = ['type' => 'post_error', 'text' => 'ошибка ключ флаг empty'];
    34.         }
    35.         else {
    36.             $this->error = ['type' => 'not_post'];
    37.         }
    38.     }
    39.     private function getRouts () {
    40.         if (!file_exists(__DIR__ . '/RoutList.php')) {
    41.             return [];
    42.         }
    43.  
    44.         include __DIR__ . '/RoutList.php';
    45.         return Rout::getPost();
    46.  
    47.     }
    48.     public function rout () {
    49.         // Начнём работу нашего роутера
    50.  
    51.         if (!empty($this->error)) {
    52.             if ($this->error['type'] == 'not_post') $this->redirect('/');
    53.             if ($this->error['type'] == 'post_error') $this->withJson($this->error);
    54.             exit;
    55.         }
    56.         if (empty($this->router_list[$this->flag])) {
    57.             $this->withJson(['type' => 'post_error', 'text' => 'маршрут не найден']);
    58.         }
    59.  
    60.         if (empty($this->router_list[$this->flag])) $this->withJson(['type' => 'Ошибка нет такого маршрута']);
    61.         // вызовим передаваемый контроллер
    62.         $mcl = explode(':', $this->router_list[$this->flag]);
    63.         if (empty($mcl[0]) and empty($mcl[1])) return  $this->withJson(['type' => 'Ошибка нет такого маршрута']);
    64.         if(is_callable(array($mcl[0], $mcl[1]))) {
    65.             call_user_func_array(array(new $mcl[0], $mcl[1]), [new FRouter()]);
    66.         }
    67.         else {
    68.             $this->withJson(['error' => 'Ошибка вызова экземпляра класса или ошибка вызова метода объекта. Смотрите Router List']);
    69.         }
    70.         // Закончим работу скрипта
    71.         exit;
    72.     }
    73.     public function getRouterList () {
    74.         if (empty($this->router_list)) return ['type' => 'error_router', 'text' => 'пустой список маршрутов роутера'];
    75.         return $this->router_list;
    76.     }
    77.     public function redirect($uri) {
    78.         header('Location: ' . $uri);
    79.         exit;
    80.     }
    81.     private function withJson($array) {
    82.         header('Content-Type: application/json');
    83.         echo json_encode($array);
    84.         exit;
    85.     }
    86. }
    --- Добавлено ---
    Это постелька для апи post запросов Там ещё куча файлов на ядро вот оно.
     
  13. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    это вероятно чтото грандиозное?) хочу.
     
  14. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Там и интерфейсы и т.д Я всего лишь хотел узнать правильно ли я это реализовал и подвергнуть тему обсуждению среди профи. А не среди молодёжи
    --- Добавлено ---
    стёб не уместен. Смысл в чём. Я сделал пастельку, то есть теперь можно посылать все запросы через одну и ту же ссылку, не обязательно единую точку входа юзать. достаточно передть в посте параметр flag пример:
    Код (Javascript):
    1. $('#addComment').on('submit', function(event) {
    2.                         event.preventDefault();
    3.                         set = {};
    4.                         set.flag = '#add';
    5.                         set.vendor_code = $(this).attr('data-vendor-code');
    6.                         routerForm('/myrouter/', 'addComment', function (data) {
    7.                             console.log(data);
    8.                         }, set);
    9.                     });
    --- Добавлено ---
    Вот так выглядит список маршрутов:

    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 06.12.2017
    6. * Time: 13:53
    7. */
    8.  
    9.  
    10. \router\Rout::post('add', \api\comment::class . ':add');
    --- Добавлено ---
    Вот непосредственно сам обработчик я не стал выносить в модель я всё сделал в контроллере:
    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 07.12.2017
    6. * Time: 12:05
    7. */
    8.  
    9. namespace api;
    10.  
    11.  
    12. use api\lib\Query;
    13. use facade\facadeRouter;
    14.  
    15. class comment
    16. {
    17.     private $error = [];
    18.     public function add (facadeRouter $router) {
    19.         $post  = $router->getPost();
    20.         $insert_array = [];
    21.         if (!empty($post['vendor_code'])) {
    22.             $insert_array['vendor_code'] = $post['vendor_code'];
    23.         } else $this->error = ['type' => 'error', 'name' => 'vendor_code', 'text' => 'не выбрано значение оценки'];
    24.         if (!empty($post['rating'])) {
    25.             $insert_array['rating'] = $post['rating'];
    26.         } else $this->error = ['type' => 'error', 'name' => 'rating', 'text' => 'не выбрано значение оценки'];
    27.         if (!empty($post['name'])) {
    28.             $insert_array['name'] = $post['name'];
    29.         } else $this->error = ['type' => 'error', 'name' => 'name', 'text' => 'Не заполнено имя'];
    30.         if (!empty($post['comment'])) {
    31.             $insert_array['comment'] = $post['comment'];
    32.         } else $this->error = ['type' => 'error', 'name' => 'comment', 'text' => 'Не заполнен комментарий'];
    33.         if (!empty($this->error)) return $router->withJson($this->error);
    34.         $insert_array['image'] = 'img_this_img.jpg';
    35.         $last = Query::connect('my_comment')->insert($insert_array);
    36.         return $router->withJson([$post, $last, 'type' => 'allow']);
    37.     }
    38. }
    --- Добавлено ---
    а вот входящий index
    PHP:
    1. <?php
    2.  
    3. define('ROOT', __DIR__);
    4.  
    5. include __DIR__ . '/Psr4AutoloaderClass.php';
    6.  
    7. $loader = new Psr4AutoloaderClass();
    8.  
    9. // register the autoloader
    10. $loader->register();
    11.  
    12. // register the base directories for the namespace prefix
    13. $loader->addNamespace('facade', __DIR__ . '/facade');
    14. $loader->addNamespace('api', __DIR__ . '/api');
    15. $loader->addNamespace('router', __DIR__ . '/router');
    16.  
    17.  
    18. $rout = new \router\Router();
    19. $rout->rout();
    --- Добавлено ---
    и всё чудненько работает
    Вот класс FRout
    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 07.12.2017
    6. * Time: 16:45
    7. */
    8.  
    9. namespace router;
    10.  
    11.  
    12. use \facade\facadeRouter;
    13.  
    14. class FRouter implements facadeRouter
    15. {
    16.     public function getPost()
    17.     {
    18.         return $_POST;
    19.     }
    20.     public function withJson($array)
    21.     {
    22.         header('Content-Type: application/json');
    23.         echo json_encode($array);
    24.         exit;
    25.     }
    26.     public function withHtml($path, $array)
    27.     {
    28.         ob_start();
    29.         extract($array, EXTR_PREFIX_SAME, "var");
    30.         include ROOT . $path;
    31.         ob_end_clean();
    32.     }
    33.     public function redirect($string)
    34.     {
    35.         header('Location: ' . $string);
    36.         exit;
    37.     }
    38. }
    А вот его шаблон(interface)
    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 05.12.2017
    6. * Time: 15:42
    7. */
    8.  
    9. namespace facade;
    10.  
    11.  
    12. interface facadeRouter
    13. {
    14.     public function getPost () ;
    15.     /*
    16.      * function Render HTML Template
    17.      *
    18.      * @array - var type array ();
    19.      *
    20.      * @return HTML template
    21.      * */
    22.     public function withHtml ($path, $array) ;
    23.     /*
    24.      * function json render array
    25.      *
    26.      * @array - var type array ();
    27.      *
    28.      * @return not return, this exit script;
    29.      * */
    30.     public function withJson ($array) ;
    31.     /*
    32.      * function redirect url
    33.      *
    34.      * @string - var type string
    35.      *
    36.      * @exit
    37.      * */
    38.     public function redirect ($string) ;
    39. }
    --- Добавлено ---
    При чём честно говоря я interface и FRouter буду расширять ещё и ещё... Хочу сделать проверку на пустоту всех значений поста и делить их на разные массивы. Т. есть чтобы можно было получить полные и не полные посты в массиве. Думаю на выходных а мож не на выходных но в скором времени сделаю и не будет всей этой волосни нахрен:
    PHP:
    1.   if (!empty($post['vendor_code'])) {
    2.             $insert_array['vendor_code'] = $post['vendor_code'];
    3.         } else $this->error = ['type' => 'error', 'name' => 'vendor_code', 'text' => 'не выбрано значение оценки'];
    4.         if (!empty($post['rating'])) {
    5.             $insert_array['rating'] = $post['rating'];
    6.         } else $this->error = ['type' => 'error', 'name' => 'rating', 'text' => 'не выбрано значение оценки'];
    7.         if (!empty($post['name'])) {
    8.             $insert_array['name'] = $post['name'];
    9.         } else $this->error = ['type' => 'error', 'name' => 'name', 'text' => 'Не заполнено имя'];
    10.         if (!empty($post['comment'])) {
    11.             $insert_array['comment'] = $post['comment'];
    12.         } else $this->error = ['type' => 'error', 'name' => 'comment', 'text' => 'Не заполнен комментарий'];
    13.         if (!empty($this->error)) return $router->withJson($this->error);
    --- Добавлено ---
    Есть ещё класс для сбора routList
    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонидэ
    5. * Date: 06.12.2017
    6. * Time: 14:10
    7. */
    8.  
    9. namespace router;
    10.  
    11.  
    12. class Rout
    13. {
    14.     static private $router_list = [];
    15.     static private $html = [];
    16.     static public function post ($flag , $class) {
    17.         static::$router_list[$flag] = $class;
    18.     }
    19.     static protected function getPost () {
    20.         return static::$router_list;
    21.     }
    22. }
    --- Добавлено ---
    Завтра залью на гит свой. С примером и html кой
    --- Добавлено ---
    и небольшой readme настряпаю.
     
  15. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Это конечно ахинея, и близко не вяжется валидация параметров с задачей роутера, но в своем проекте ты сам творец :).
     
    pinokio нравится это.
  16. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Да честно скажу, каждый контроллер начинается с одного и того же а если !empty($_POST[ВОТ ЭТО]) ТО.... Надоело не хочу не чё проверять хочу взял и они уже либо посланы со своей пустотой обратно, либо я их использую...
    --- Добавлено ---
    А я их в день пишу, тучи... Задолбало. День сурка блин с этим !empty
    На них тока тратится если посчитать наверно пару часов точно трачу тока на нописание этих проверок... Уфф...
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  18. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Я пользуюсь Слим там такой фичи нет
    --- Добавлено ---
    Вроде как
    --- Добавлено ---
    И опять же это класс отдельный а это уже строчки не хочу не чё писать хочу сходу чтобы роутер сам сказал или пока или привет
    --- Добавлено ---
    Это же у меня не совсем роутер это для создания апи через пост простыню сделал. А в посте всегда данные идут осталось для маршрута указать какие валидируем а какие нет так наверное как нибудь сделаю
    --- Добавлено ---
    У меня есть либа для валидации входных данных но меня раздражает и ее писать
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Есть
     
  20. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Причем тут миддлваре и проверка приходящих постов.... Миддлваре позволяет конечно взять и сделать на группу маршрутов проверку но опять 25 ее там писать да и не получится на каждый пост апи писать одну проверку... Так как в 90 из 100 % приходные данные разные. А проверяем на пустоту одинаково
    --- Добавлено ---
    Идея у меня совсем иная посмотри я предлагаю делить массив на входные данные на уровне роутера на массив с пустыми значениями и на массив где значения не пусты
    --- Добавлено ---
    Тут у нас плюшка если значения все полные то можно вообще на пустоту проверку не делать если же нет то сделаем проверку
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Пишешь один раз класс middleware, который проверяет на empty-значения, и цепляешь его к роутам, где надо. Хотя, кстати, у тебя что, во всех 100% форм все поля required? Хотя, конечно, в ларке красиво сделано с вынесением валидации в класс запроса...

    Нафига поверх годного роутера slim писать свою поделку?
    --- Добавлено ---
    Кстати, твой facadeRouter по сути Request, а не роутер. Он ничего не маршрутизирует, он позволяет получать данные из запросов (ну насколько видно сейчас).
     
  22. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Это я накидал за один день что в голову быстро пришло, это не для слима. Я что дурак поверх слима лепить ещё роутер XD Это на тот случай если нет возможноси притянуть годный роутер. Я сделал чисто для апи постов заметил что если там не существует поста он редиректит?)
    Это для битрикса. Я туда впаял это, потому что с тем что есть у битрикса я не согласен работать и я обшился там в корнях у него своим классом перехватывая его запрос на myrouter и отправляю к себе на ядро
    --- Добавлено ---
    это специально я сделал чтобы не проверять линки я посылаю всё время на один и тот же url и уже указываю маршрут в передоваемом значении flag
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    @pinokio, у меня есть правило, которое не подводит - работая с какой-то CMS, я работаю по правилам этой CMS. Во-первых, так меня всегда быстро поймёт другой знакомый с ней программист, во-вторых, в случае чего можно пинать поддержку (особенно, если платный продукт). У ЮМИ, например, если ты что-то менял в ядре, ты (точнее, твой клиент) теряешь право на поддержку, хотя заплатил нехилые такие бабки. А пока ты следуешь правилам, поддержка может оказаться полезной.
    --- Добавлено ---
    Не лезть в чужой дом со своими порядками.
     
    Dimon2x и voral нравится это.
  24. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    нет он и response отдаёт. Но код у меня простой он сильно не грузит да и работать будет стабильно да не функциональный но для временного дела подойдёт.
    да и если честно сказать скажу одно например в моём двиге уже более 100 маршрутов пост знаешь как уже там с комментариями к каждому почти читать его не удобно :D
    --- Добавлено ---
    нет увольте. Я не буду для добавления сраного комментария тащить всю библиотеку битрикса со всем её процедурным гавном. Чтобы запрос шёл как черепаха. И тут уже не в кеше дела или в оптимизации там просто куча говна
    --- Добавлено ---
    @mkramer не скажешь же что код хреново написан) И можно по другому написать я думаю я сделал всё в стандартах как и у всех просто функционала нет) Но это не роутер это класс для апи на один линк. Вот и всё.
     
  25. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Поэтому роутинг yii2 мне в чём-то нравится больше, чем PSR какой-то там. Если я напишу класс HrenController, а в нём метод actionHren, то Yii2 сам его найдёт по маршруту hren/hren, без моей помощи.