Максим Федоров, у меня самописная ORM. Я вынужден её использовать, потому что пишу модуль для СMS, которая не использует PDO. А все популярные ORM работают именно через PDO. Но дело даже не в этом.
Разберусь с валидатором, потребуется сделать такой же "saver", которому нужно будет брать одни поля, создавать на их основе директории, загружать файлы и в итоге обновить и сохранить основную модель. Этому классу тоже потребуется доступ к объекту основной модели.
Наверно придётся создавать класс обертку для модели, который подружит модель и субмодели между собой. Так как он находится снаружи, у него будет доступ к объектам всех моделей.
Максим Федоров, Давайте попробую объяснить по-другому. Потому что как ни крути, я упираюсь в эту проблему. код валидации на несколько десятков строк. Представьте, что я его вынес в класс-валидатор, написанный специально для этой модели. В модели я хочу вызвать Validator::validate($model_object); но не могу. Внутри модели у меня нет $model_object. Как мне передать объект модели в валидатор?
Допустим можно передать сами данные в валидатор в видео массива. Ну а если мне понадобится внутри валидатора прикрутить фильтр, изменяющий данные модели? Как тогда быть? Передавать в валидатор массив полей по ссылке? Мне было бы гораздо удобнее передать в валидатор весь объект модели. Но как это сделать внутри модели?
Максим Федоров, во-первых, чтобы выполнить валидацию субмодели требуются данные из модели. Было бы гораздо удобнее иметь доступ ко всему объекту модели, а не передавать каждое поле сначала в субмодель, а потом в случае изменения передавать обратно. Во-вторых, все поля хранятся в основной модели. Было бы правильнее хранить и ошибки о них в основной модели. А не таскать их туда и обратно из модели в субмодель. Гораздо удобнее у одной модели вызвать get_errors() и получить в шаблоне сразу все ошибки.
Субмодели не имеют собственных полей. Без прямого доступа к объекту родительской модели мне придётся бесконечное количество раз таскать поля из модели в субмодели. И не только поля, но и ошибки валидации. Это дополнительный код. Такие накладные расходы сводят на нет смысл разделения логики на подклассы.
Daria Motorina, спасибо за ответ. Я уже выяснил, что нативными средствами php нельзя импортировать папку из-за особенностей языка. Подскажите, нужно ли мне использовать в use уникальный префикс с именем плагина, чтобы чужие автозагрузчики его не трогали, и чтобы мой автозагрузчик не искал чужие классы. Это хорошая практика?
FanatPHP, я и инклюдил. Как и написал в вопросе, чтобы подключить нужный файл, мне нужно знать в какой папке его искать. Я пытаюсь задать в use не полный путь к файлу, а только папку. В результате use вообще не попадает в загрузчик. Затем я переношу код автозагрузки в основной файл для наглядности примера и копирую пример на тостер. И получаю вопрос зачем я это сделал. Чтобы компактно показать пример использования.
Максим Федоров, composer имеет свою реализацию автозагрузки, которая также предполагает, что namespace и use будут строиться по определенным правилам. Выяснение этих самых правил - и есть суть вопроса.
FanatPHP, это не файл с автолоадером. Это главный файл плагина. Я перенес в него spl_autoload_register для демонстрации примера. Обычно spl_autoload_register лежит в файле autoload.php, который инклудится
Виталий, да. Если проверять сотни доменов, то твой ip-адрес заблокируют. Я наткнулся на этот вопрос в результатах поиска, потому что сам ищу альтернативу. Как вариант, можно использовать комбинацию из нескольких бесплатных сервисов, максимально разделяя запросы по времени. Ну или прокси покупать. Нормальное API неспроста платное.
1. А насколько важно давать права 775/664? Если мне не изменяет память, они выдаются для нескольких нужных папок, а остальные пусть сидят 755/644.
2. Что мешает "точечно" изменять права доступа только на нужные файлы перед редактированием?
Я сейчас пишу инструкцию по миграции сервера. Там уже 20 пунктов. Бегать по папкам и выставлять права на десятках сайтов - утомительное и контрпродуктивное занятие. Я хотел бы получить более простое и надежное решение, не привязываясь к конкретным папкам
Максим, вы правы. Я зачем-то засунул всё в 1 LIKE. Более того, у себя в коде я нагородил (LIKE '%word2%' and LIKE '%word2%') or (LIKE '%word2%' and LIKE '%word1%'). Даже стыдно стало.
Добавьте последний комментарий как отдельный ответ, я его утвержу
Максим, в примере 2 слова. Это всего 2 варианта порядка следования слов. Если в запросе будет 3 слова, то вариантов уже 9. Можете себе представить, как будет выглядеть запрос для 5 слов? Этот запрос генерируется кодом, но мне хотелось бы заменить его на что-то очень простое, чтобы в будущем не было проблем с отладкой большого сгенерированного запроса. Я хотел бы просто передать список подстрок, чтобы MySQL проверял вхождение всех подстрок в любом порядке.