Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#26 Re: Laravel 5.x » Оптимизация роутинга. » 11.10.2017 13:02:44

Спасибо AlexeyMezenin

Перенес логику в контроллер, так явно быстрее получается. А закэшировать остальные маршруты все равно не получается так как пользуюсь такими штуками как

Route::group(['prefix' => 'content', 'middleware' => 'auth.basic'], function()

Вот мне интересен еще один момент, походу дела ларавел выполняет все функции с инсталом роутев, а уже потом ищет подходящий маршрут. По мне как то не совсем умно получается, может конечно чего не понимаю...

#27 Re: Laravel 5.x » Оптимизация роутинга. » 10.10.2017 18:58:26

Так в таком случае мне надо в урле указывать id категории. А она может быть разная, не обязательно, что я написал, вот пример еще

/root-cat/cat-2/cat-3/contacts
/root-cat2/contacts

#28 Re: Laravel 5.x » Оптимизация роутинга. » 10.10.2017 17:53:45

Ну смотри, вот у меня есть куча роутингов для моего дерева категорий, если я делаю обычный контроллер роуте, то там вызывается какой то контроллер и максимум, что я могу сделать это передать ему часть урла {id} .  А мне нужно передать туда еще ID категории, что бы контроллер мог понять какую запись надо получить.
Вот пример у меня есть 2 статьи урл у которых contacts .  Одна находиться по пути /info/contacts вторая /pages/contacts . За вывод их отвечает один котроллер. Если я добавляю два рутинга например info и pages на один и тот же метод контроллера и в параметрах методу будет название статьи тобиш contacts, то не ясно какую статью надо выдать, толи с первого пути, то ли со второго. Вот по этому мне надо как то в этот метод передать id категории. Для этого использую Route::get($uri, $callback); Но они не кэшируются (

Так лучше ? smile

#29 Laravel 5.x » Оптимизация роутинга. » 10.10.2017 16:58:22

Kiran
Ответов: 9

Привет всем!

Опишу немного ситуацию. Есть у меня приложение. Там куча роутингов соответсвенно. Каждый раз при запуске все эти маршруты по новой компилируются и тп... Вот. Для контроллер роутинга есть фишка в том, что можно закэшировать, но вот беда в том, что у меня части маршрутов надо передать переменную из кода, и приходиться использовать роутинги с функциями(клосуре) и как это оптимизировать я пока понятия не имею.
То-есть по сути у меня через админку создается дерево категорий, для каждой категории задается url и в модуль(контроллер) с кем она работает. Потом я строю урлы для всего этого дела(вложенность может быть любая) и далее генерю роутинги, но опять же в роутинг надо передать id категории, что бы контроллер который отвечает за отображения данного материала применил фильтр по категории... Вот. Мысли у меня пока такие.
1. Создать обычные контроллер роутинги, и там, где нужно знать категорию обращаться к зараенее закэшированному массиву с роутингами...
2. В конце файла роутингов добавить переход в контроллер который уже определит к какому модулю относиться данная ссылка и вызовет нужный контроллер с нужными параметрами.
Может еще как можно реализовать? Щас пишу, думаю второй способ получше, но хотелось бы вашего мнения услышать. Если конечно я хоть что то понятно написал smile

Спасибо!

#30 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 23.05.2017 15:04:34

Constb спасибо, но либо я ничего не понял, либо уже это реализовал,только у меня называется поле module. А вот с айдишниками приходится плюсовать к ним значение, иначе при выборке, часть записей отсутсвует у которых одинаковые id. Вот. По сути я реализовал пагинацию таки, надо было другой класс использовать...

use Illuminate\Pagination\LengthAwarePaginator;

$paginator = new LengthAwarePaginator($resultNew, $count, 12);
$paginator->setPath("search")->appends(Request::All());

Щас вот с генерацией уролов еще разберусь smile .

Еще такой вопрос, может есть решение, вот сделал я выборку, а как мне можно теперь выделить слова найденые? Что то ума не приложу, по идее это должен бы сфинкс сделать, но тоже не ясно как его уговорить на такой подвиг smile

#31 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 22.05.2017 19:36:33

Вообщем потестировал я этот метод, если айдишнки совпадают, то он выводит в выборке что то одно. Вот мой конфиг пока такой
source gotoaltay . Это я так понял не вот такая фитча штатная, поэтому всяческие скрипты ее врятли будут поддерживать sad

http://sphinxsearch.com/docs/current/conf-source.html

Вот оно, кстати я конфиг чуть пределал в надежде что получиться но походу, тот вариант что у меня был делает то же самое smile.

Вообщем пока не вижу выхода из готовых решений, Хелп ми плиз smile)

{
        type                    = mysql

        sql_host                = localhost
        sql_user                = 234234
        sql_pass                = 234234
        sql_db                  = 2342344
        sql_port                = 3306  # optional, default is 3306

        sql_query_pre           = SET NAMES utf8
        sql_query_pre           = SET SESSION query_cache_type=OFF

        sql_field_string        = name
        sql_field_string        = desc
        sql_attr_string         = module
        sql_attr_timestamp      = created_at
}

source gotoaltayProperties : gotoaltay
{
        sql_query               = \
                SELECT id, UNIX_TIMESTAMP(created_at) AS created_at, name, `desc`, 'property' as 'module' FROM properties
}

source gotoaltayExcursions : gotoaltay
{
        sql_query               = \
                SELECT id, UNIX_TIMESTAMP(created_at) AS created_at, name, `desc`, 'excursion' as 'module' FROM excursions
}
source gotoaltayRealties : gotoaltay
{
        sql_query               = \
                SELECT id, UNIX_TIMESTAMP(created_at) AS created_at, name, `desc`, 'realty' as 'module' FROM realties
}


source gotoaltayNews : gotoaltay
{
        sql_query               = \
                SELECT (id+4000000) as id, UNIX_TIMESTAMP(created_at) AS created_at, name, `text` as 'desc', 'news' as 'module' FROM news
}

source gotoaltayPosts : gotoaltay
{
        sql_query               = \
                SELECT (id+5000000) as id, UNIX_TIMESTAMP(created_at) AS created_at, name, `text` as 'desc', 'post' as 'module' FROM posts
}

index gotoaltayIndexPosts
{
        source                  = gotoaltayPosts
        path                    = /var/lib/sphinx/posts
        morphology              = stem_enru
        docinfo                 = extern
        min_word_len            = 3
        charset_table           = 0..9, A..Z->a..z, _, a..z, U+0401->U+0435, U+0451->U+0435, U+410..U+42F->U+430..U+44F, U+430..U+44F
        html_strip              = 1
}
index gotoaltayIndexProperies : gotoaltayIndexPosts
{
        source                  = gotoaltayProperties
#       source                  = gotoaltayExcursions
#       source                  = gotoaltayRealties
#       source                  = gotoaltayNews

        path                    = /var/lib/sphinx/gotoaltay-properies
}

index gotoaltayIndexExcursions : gotoaltayIndexPosts
{
        source                  = gotoaltayExcursions
        path                    = /var/lib/sphinx/gotoaltay-excursions
}

index gotoaltayIndexRealties : gotoaltayIndexPosts
{
        source                  = gotoaltayRealties
        path                    = /var/lib/sphinx/gotoaltay-realties
}



indexer
{
        mem_limit               = 128M
}

#32 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 22.05.2017 18:35:34

Спасибо, завтра проверю, посмотрим что получится. Но со скаутом получается толком не скрестить, так как он использует какую то одну таблицу. Все равно придется делать выборку и заморачиваться с пагинацией... Или скаут можно натравить на выборку из нескольких моделей?
я там через конфиг объединил, но твой способ крутее полюбому если заработает smile.

#33 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 22.05.2017 18:12:30

constb  Спасибо! Но вот что меня смущает, в сфинксе я объединил 5 таблиц в одну, так же пришлось там айдишки править, ибо ему надо уникальные. Вот, и мне кажется sphinxsearch работать будет не идеально с таким положением дел... Про скаута погляжу, не смотрел с ним реализаций...

#34 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 22.05.2017 17:44:51

Фуф, дошли руки до дела таки, решил начать с Sphinx. Все настроил, но вот досада, с пагинацией таки не срастается у меня ничего. Не могу понять как прикрутить страндартную пагинацию к этому движку, так что бы шаблоны все стандартные работали... Совсем нет желание переписывать тот функционал, что есть. Может есть какие наработки уже?

Вот что наклепал, но это тестово, оно толком не работает

        $count = get_object_vars($conn->select(
            \DB::raw("SELECT COUNT(*) FROM gotoaltayIndex WHERE MATCH (:query) OPTION max_matches=100000,field_weights=(name=10, desc=5)"), array(
            'query' => $query,
        ))[0])['count(*)'];

        $results = DB::connection('sphinx')->select("SELECT * FROM gotoaltayIndex WHERE MATCH ('".$query."') OPTION max_matches=100000,field_weights=(name=10, desc=5)" );
   

        $paginator = new Paginator($results, ($count/12), 2);
        echo $paginator->links('vendor.pagination.bootstrap-4');

#35 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 11.05.2017 12:10:24

Всем спасибо, обмозгую все сказанное и буду потихоньку внедрять...

#36 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 10.05.2017 17:56:37

DBR пишет:

}%Как вариант - поля name & desc вынести в отдельную таблицу (и модель), которая будет связана с остальными полиморфной связь. 

Тогда можно будет искать по одной таблице, легко можно будет получать объекты разных типов и не надо будет следить за синхронизацией таблицы для поиска.

А для основных таблиц можно будет сделать прокси-геттеры для получения нужных данных из полей  name & desc.

Понятно? или нужен пример?

Частично понятно, а вот про прокси-геттеры не ясно, видимо не дочитал smile. С примером оно всегда понятне будет smile.  А возможно оставить поля name и desc в основных таблицах и продублировать их в таблицу для поиска? Так как поиск не так часто нужен будет и структуру менять не охота.
Так старательно хотел уйти от структуры таблиц в вордпресе, где все данные в двух таблицах храняться и опять таки прихожу к этой теме )...

#37 Re: Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 10.05.2017 16:56:19

Спасибо за ответы.

По поводу вывода, да мне надо получить список найденых моделей, получается, что разных типов, но можно привести все к одному типу, там надо то заголовок только да и описание...

Algolia я так понял бесплатный сервис.

Сейчас обрисовывается такая картинка, при сохранении записи я создаю клон полей(загловок и текст) например в модели search и далее у меня появляется возможность делать нормальную выборку всех данных разных типов с использование пагинации. Но если честно мне не очень охота зависеть от дополнительных сервисов и тем самым усложнять относительно простой проект. Со Sphinx та же история, если бы база была очень большой все это имело бы смысл но в моем случае наверное излишне, автокомплита там тоже не будет, поэтому запросов к бд минимум.  Может что то попроще можно подтянуть для боле менее корректного поиска теперь уже получается по одной таблице?

Ну или еще какие то варианты может есть интересные?

#38 Laravel 5.x » Поиск по нескольким моделям с нормальной пагинацией » 10.05.2017 13:43:43

Kiran
Ответов: 21

Добрый день!

Есть у меня проект, там несколько моделей, статьи, объявления и тп. У всех у них есть поля name и desc, вот хотелось бы как то сделать нормальный поиск по всем этим моделям, вся документация, что по скауту, что по другим решениям описывает, работу только с одной таблицей... По крайней мере я ничего не нашел другого...

На ум приходит решение написать трейт для модели, как для скаута, что бы при добавлении новой записи она еще дублировалась в нужную мне табличку и потом уже по той табличке осуществлять поиск, но там тонкостей столько всплывает, и импорт делать и как то обрабатывать сотфделит... Может какое решение уже есть готовое?

Спасибо!

#39 Laravel 5.x » Blade и функции » 06.04.2017 13:48:29

Kiran
Ответов: 0

Здравствуйте!

Назрела тут пачка вопросов, помогите, чем сможете smile.

В новом ларавеле в блейде добавили компоненты, вот, можно ли их использовать как функци? И как вообще правильно решить задачу, где надо время от вермени повторять код?

У меня есть еще проектик, сделал вывод всяких там разных хтмл инпутов селектов и все это заточено под бутстрап. Что бы побыстрому формы делать нужные мне. Вот в данный момент часть когда реализована через класс, где идет обработка параметров и собственно сами инпуты выводяться, а другая часть реализования через блейд, где я уже натягиваю на это все html разметку. А есть компоненты типа галереи, там много html и рука не позволяет их из вьюх выносить и их сделал как компоненты(благо не часто вызываются). А вообще в идеале хочется к какому то одному решению придти, но незнаю как красиво это реализовать...

#40 Re: Laravel 5.x » Фасады тонкости. » 26.03.2017 18:33:30

Спасибо за такой классный ответ. я учусь кодить красиво, но пока опыта мало, поэтому такие ответы очень ценные. Чем больше такой информации попадает тем лучше получается код. Сейчас написал класс для операций вставки обновления и прочего для контроллера и наследую его всеми другими контроллерами, вот там не получается метод внедрить при перегрузке функций... Сейчас все больше и больше ясности приходит по работе с сервис контейнером , поначалу  мозг совсем отказывался понимать :-). А уж грамотная работа с редактором кода для меня конечно это высший пилотаж :-)
Спасибо!

#41 Laravel 5.x » Фасады тонкости. » 25.03.2017 14:42:25

Kiran
Ответов: 2

Добрый день, любителям ларавела :-).

С инглишом не совсем силен, а вот в русских доках совсем не встречал такой инфы. Сейчас создаю фасады просто указывая на мой класс без всякого создание сервис контейнера. Это удобно ибо проще. Но вот в доках везде пишут, что надо создавать сервис контейнер вначале. А вот зачем если он сам создаётся? :-)

#42 Re: Laravel 5.x » Странности при работе с роутингом и artisan » 09.03.2017 17:58:54

Просто штука такая, я админку делаю и буду таскать ее между проектами постоянно, мне надо как то автоматизировать процесс добавления всего этого дела, типа копи паст и все работает :-).

#43 Re: Laravel 5.x » Странности при работе с роутингом и artisan » 09.03.2017 15:33:00

constb пишет:

routes.php – это просто пхп-файл, в нём необязательно вызывать только фасады. в нём вообще что угодно можно выполнить smile

Это хорошо. я вот хочу вынести часть когда из роутев в отдельное место, создал для админки пространство имено новое, вот туда бы вынести куда то. Как это грамотно сделать?

#44 Re: Laravel 5.x » Странности при работе с роутингом и artisan » 09.03.2017 13:48:13

constb пишет:

а если без фасадов?

app()->make(\App\Libs\Categories::class)->installRoutes();

Можно и так но у меня там структура вся в этом классе, виде дерева, она при каждом запросе нужна и много где используется и не однократно за запуск приложения...

#45 Re: Laravel 5.x » Странности при работе с роутингом и artisan » 08.03.2017 09:03:08

Угу все верно конфиг разный, в php.ini я сам писал. Кстати раз уж пошла такая тема, когда пересоздовал все таблицы все равно валиться в ошибку, так как таблицы не находит, решил вот так
if (!App::runningInConsole()){
    Categories::installRoutes();
}
но честно говоря тоже не идеал, так как надо проверять команду работы с миграциями.

#46 Re: Laravel 5.x » Странности при работе с роутингом и artisan » 04.03.2017 19:04:13

Сам спросил сам отвечаю smile... Вообщем не надо использовать шорттэги в пхп, в консоли они не работают :-). Как догодался даже понятия не имею, бубен все таки вещь хорошая ;-) . <? заменил на <?php ...

#47 Laravel 5.x » Странности при работе с роутингом и artisan » 04.03.2017 12:38:34

Kiran
Ответов: 11

Доброе время суток, Друзья!

Наткнулся на такую вот неприятную вещь.

Пишу в файлик routes/web.php такую строчку

Categories::installRoutes();

Собственно это мой класс, который генерит маршруты. На него создан фасад.

class Categories extends Facade {

    protected static function getFacadeAccessor() { return '\App\Libs\Categories'; }

}

И все великолепно работает в вебе, но как только я запускаю команду artisan он вываливает мне на экран файлик '\App\Libs\Categories, все как пологается со всеми классми и функциями и пишет ошибку:

  [ReflectionException]                     
  Class \App\Libs\Categories does not exist 

я понять то не могу какого он лезет в файл web.php (вроде как для веба он smile ), а во вторых, как он не может найти класс если он мне его в этом же сообщении на экран вывалил. Может я что то не догоняю просто.

Сервис контейнер не делал для него, вернее делал но там похожая котовасия. я так понимаю при создани фасадов Ларавел как бы создает одиночный экземпляр класса, который и нормально доступен в системе...  Мне большего не нужно от этого класса.

Вот, версия самая последняя, только обновился...

Спасибо!

Подвал раздела