Всех приветствую. Очень продолжительное время пишу на Symfony/YII и внезапно поймал себя на мысли, что я совершенно не могу работать с standalone приложениями. К ним относится к примеру довольно известный роутер Pux (GitHub). То что с помощью фреймворка решается на уровне «мышечной памяти», в каких то своих проектах без использования этого самого фрейма, превращается в кашу. В общем, прощу помощи дабы разобраться с тем, как правильно использовать данную библиотеку. Не нужно относиться к этому вопросу аля «эээ, иди кури php.net». Там уже все прокурено и перекурено. Просто с годами потерял скилл нативной разработки. Затык с роутером происходит сразу же на этапе определения путей. Как говорит дока: PHP: use Pux\Mux; use Pux\Executor; $mux = new Mux; $mux->get('/get', ['HelloController','helloAction']); $mux->post('/post', ['HelloController','helloAction']); $mux->put('/put', ['HelloController','helloAction']); $mux->mount('/hello', new HelloController); $route = $mux->dispatch( $_SERVER['PATH_INFO'] ); echo Executor::execute($route); Естественно классы уже загружены через spl_autoload_register. Создан контроллер HelloController наследуемый от Pux с паблик экшеном helloAction. Вот только ничего абсолютно не происходит, в логах тоже пусто.
какой смысл ты вкладываешь в это понятие? --- Добавлено --- так а зачем ты пытаешься писать без своего любимого фреймворка? какой в этом смысл? --- Добавлено --- ты уверен, что тебе интересен именно $_SERVER['PATH_INFO'], а не $_SERVER['REQUEST_URI'] ? мне кажется, что последний более подходящий для задачи обработки урлов.
Гит смотрел? В доке такой пример. Ах да, я забыл, как здесь модер супер толсто троллит. Как бы юзать симфонию ради 5 страниц аля лендниг.. надо быть бичом конкретным. Однако должна быть возможность добавить/убавить пару страниц и функционала, а не гемороиться с написанием модуля для фрейма или того хуже cms.
сильно пахнуло хамством... если это твой единственный аргумент, то тебе наверное лучше оставаться в мире фреймворков да ну и ладно. повардампи оба варианта, и реши какой тебе больше подходит. завязывай хамить и подозревать заговоры. параноиком станешь. бичом? ты в тюрьме воспитан? просишь помощи, но при этом диалог вести стесняешься? боишься зашквариться? не кипишуй, все свои. я ж просто спросил про задачу, не более того. а почему не взять например ModX? отличная система. Хотя я тебя понимаю, я тоже свой движочек накидал для маленьких сайтов. Остался очень доволен. Ну да самим собою довольным быть несложно, это так. Как раз поэтому и говорю про $_SERVER['REQUEST_URI']. Тут сидит весь запрошенный урл, а не кусок после файла php. Я его парсю через parse_url(), соотв. потом по path ищу подходящий файлик, а в случае Pux видимо его и надо парсить. Хотя возможно в $_SERVER['PATH_INFO'] по счастливому совпадению уже сидит то что нужно, но в доке у этого значения нет гарантий, что так будет всегда.
Да я уже обвардампился весь. Поэтому и спрашиваю на форуме, может кто пользовался именно этой библиотекой. На Тостере тоже никто не вкуривает, там такие же сплошные фреймворкщики. Это кто кому хамит еще В жизни то никому доверять нельзя, а в интернетах так и подавно. Сплошной сарказм и ирония.
Да пробовал конечно. В общем с этим примером что то не то, ибо экзекутор должен принимать массив. Ну это ладно, пол беды. Самое что меня интересует то, что объявленные методы не обрабатывают ни контроллер ни параметры post/get. В этом то и был вопрос. Задаю путь по образу и подобию доки: PHP: get("/home/:id", ['HomeController','indexAction']) Ну и на этом все. Параметры из строки вообще не принимает. Nginx настроен точно так как указано в доке.
Так протрассируй этот роутер отладчиком в NetBeans или PHPStorm, и узнай, что там и как работает. Видимо, что-то не срабатывает. Я, когда маленький сайт, в качестве фреймворка использую https://www.slimframework.com/ --- Добавлено --- Кстати, а у HelloController глобальный namespace?
Стало интересно, поигрался на локалке. Всё работает. PHP: <?php require 'vendor/autoload.php'; use Pux\Mux; use Pux\Executor; class HelloController { function helloAction() { echo "Hello"; } function goodBuy() { echo "Good buy"; } } $mux = new Mux; $mux->get('/', ['HelloController','helloAction']); $mux->get('/good-buy', ['HelloController','goodBuy']); $route = $mux->dispatch(str_replace("/utils/pux", "", $_SERVER['REQUEST_URI'])); echo Executor::execute($route); Строка 21 приобрела такой странный вид, потому что мне лень было отдельный домен создавать под эксперимент, и у меня эта штука доступна по пути "localhost/utils/pux". Разбираться, как сделать правильно сайт во вложенной папке на этой штукенции было лень Для работы роута good-buy естественно апач был настроен на перенаправление запросов на index.php (@igordata, знаю, скажешь, "апач не нужен". А он мне нравится, нравится, нравится, ну и не в том вопрос был). Но что-то для выполнение всего одной функции он много зависимостей натянул с собой на мой вкус. PATH_INFO у меня на локалке нету в $_SERVER, настраивать неохота - опять же, ради 5 минут эксперимента. --- Добавлено --- И с параметром попробовал, работает. Короче, дело скорее всего таки в настройках сервера
Вообщем, ТС, выложи конфиг ngnix для сайта, знатоки подскажут. Дело явно в нём. Ну и проверь, есть ли у тебя PATH_INFO в $_SERVER, когда ngnix без апача работает, там вроде надо ещё что-то в конфиг прописать, чтоб было.
И правда. Странно, на том же Yii конфиг нормально в index перенаправляет. Пока что на локалке индейца запустил, потом буду смотреть что за дела с нгинксом. Ну раз завелось, значит пришло время следующего вопроса Есть у нас значит форма: HTML: <form action="" method="post"> <input type="input" name="id" value="1"/> <input type="submit" value="Send"/> </form> И путь по которому должен приниматься Post: PHP: $mux->post('/:id', ['Controllers\FormController', 'postAction']); Где экшн просто возвращает значение: PHP: public function postAction($id) { print "postAction: $id"; } В общем все как в примере. Но данные не приходят. Куда копать?
Так, эм... Пост-параметра нету в маршруте Как говорится, элементарно. POST-параметры, видимо, нужно как обычно принимать. А из маршрута и аргумента его уберите
Лучше помогите разобраться в данном случае. Я тут погуглил, почитал, посмотрел устройство различных форков из симфониевского роутера. Не могу понять принцип устройства в общем. Понятное дело что основная суть в парсинге и разборе запросов, все мы когда писали свои parse_url и switch case. Но во всех классах используются устоявшиеся обозначения методов типа mux, mount, add, dispatch, execute. Я совершенно не въезжаю в их закономерности. Еще раз повторюсь, что долгое время работал с фреймами, где настройка роутинга заканчивается на перенаправлении всех запросов в корень и все. Далее происходит работа только на уровне MVC. Вся документация к роутерам написана так, будто рассчитана на динозавров, принимавших участие в становлении Lisp. Совершенно ничего не понятно (возможно только мне). Поэтому и прошу разъяснений.
я честно говоря пока ещё не встречал человка, который реально пользуется отдельными роутерами. Так что может в этом причина.
Мне в данный момент это кажется достаточно разумным. Если абстрагироваться от юзабилити на стороне клиента, скажем администрирования через браузер и от огромного количества «мусора» который тянется в след за CMS и любым фреймворком (авторизации, шаблонов, комментов, диких сетов всевозможных фильтров, загрузки на сервер и тд), иногда появляются задачи, которые нужно описать в два три класса и заложить в функционал надежду на масштабируемость В данный момент мне необходим роутер для создания взаимодействия с API, который семимильными шагами множит ветки от различных методов и документацией к нему, одновременно все фичи организовав в рамках стандартного паттерна mvc. Все это было просто на начальном этапе, сейчас же появилась необходимость организовать что то то похожее на https://vk.com/dev. Отсюда и желание разобраться с роутингом.
редактирование контента в IDE и отказ от админки в браузере за ненадобностью - это как раз те самые причины, по которым я сделал свой движок. Как следствие прилипла нормальная подсветка синтаксиса, без коверканья, и поддержка систем версий.
@rukisalat, а в чём проблема с этим роутером? Я его завёл вчера за 5 минут. Ну только глупостями заниматься не нужно, ожидая что post-параметр каким-то образом можно будет поймать, разобрав регуляркой $_SERVER["PATH_INFO"], как вы предполагаете здесь: Насколько мне известно, в Symfony роутинг примерно также и фигачится, и в Laravel тоже. Поэтому я ими и не пользуюсь Мне нравится, чтоб как в Yii, controller/action превращалось в вызов соответственного класса и метода без моей помощи. Но что-то сложнее я мог объяснить. Хотя, повторюсь, я вряд ли эту штуку возьму. Когда я делаю что-то маленькое, я беру это: slimframework.com или это: https://fatfreeframework.com
Со Slim у меня как-то лучше сложилось. Пробовал ещё Silex (на реальном проекте), но он столько symphony по зависимостям тянет, что его уже микрофреймфорком и не назовёшь. И с Lumen (с ним только немного игрался) та же ситуация, он тянет слишком много Laravel.
Налабал по началу двиг для парсера UBER'а, потом переписал под API для пластиковых карточек, потом дописал для обычного сайта со smarty, сейчас буду снова подтачивать под API, для приложений. Опциональный роутинг, query path = namespace и прочая приблуда.