Laravel по-русски

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

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

#1 Re: Laravel 5.x » Рендер view в "дочернем" методе контроллера » 30.03.2018 18:22:45

Решение, во всяком случае, одно из решений: кинуть специфический эксепшн:

throw new HttpResponseException(
    Response::view('errors.inactive_user')
);

#2 Re: Laravel 5.x » Laravel стал практически бесполезен из-за слишком высоких требований? » 29.03.2018 20:53:09

Там проблема не столько в Laravel, видимо, сколько в сторонних пакетах. Например, один видел сам - dbal из симфони. Оно без 7.1 не заводится. И тут уже порекомендовали VPS, они в самом деле стоят дешево и позволяют все, что хочешь. Не представляю, как бы я очереди на хостинге заводил, например.

#3 Laravel 5.x » Рендер view в "дочернем" методе контроллера » 29.03.2018 20:40:38

aanon
Ответов: 1

В общем, такая вот проблема. Есть у меня код в контроллере:

public function test(){
    return view('test');
}

public function index(){
    $this->test();
}

Когда я открываю страницу, роут смотрит на метод index и выполняет его. index выполняет test. А test должен отрендерить вьюху и остановить исполнение остальной программы на этом.

Но, разумеется, test возвращает управление в метод index. Поэтому рендера не происходит. Что сделать, чтобы рендер таки произошел?

Мне нужна именно такая история. Я не могу сделать return $this->test() из index(), это убьет всю мою идею. Это что-то вроде проверок на ошибки, и если ошибка, то отрендерить одно, а если не ошибка - продолжить выполнение того, что в index(). И я навешиваю этот самодельный валидатор в разные методы.

#5 Laravel 5.x » Параллельное выполнение очередей » 07.08.2017 18:14:57

aanon
Ответов: 1

Ребят, можно как-то распараллелить выполнение очередей? Все обгуглил, не нашел.

Дело в том, что у меня может появиться одновременно огромное число очередей с долгим временем выполнения каждая. Каждая очередь инициализируется пользователем и в ответе передает данные обратно через websocket. Получается, что если 100 человек одновременно что-то запросят на сайте, то будь у меня запущено даже 50 воркеров, то последний пользователь все равно будет долго ждать, пока воркеры не доберутся до его очереди.

Есть ли какой-то способ для каждой новой очереди запускать отдельный php-процесс автоматически?

Есть подозрение, что никак. Есть какое-то решение действительно параллельного выполнения для ларавела, пусть это и не очереди?

#7 Re: Laravel 5.x » Как считывать json ответ во view? » 04.08.2017 20:49:12

Странно...Раньше так делал и работало...

Я бы сказал, что это вообще порочная практика из Си - возвращать 0 или 1, тру или фелс. По идее если что-то случилось внутри Auth::logout() (или чего угодно еще), то оно должно кинуть Exception наружу, а ты его перехватить. За конкретно этот метод не ручаюсь, конечно.

#8 Re: Laravel 5.x » ВебСокеты (Laravel 5.4 + Socket.io + Node.js + Redis) - нужна помощь » 04.08.2017 19:11:52

Дополню, что и выкидывать отсюда Laravel не хочется. Там уже есть сам функционал поиска. Писать демон на PHP и прочее вроде и не нужно... А вроде и как приспособить Laravel - непонятно.

#9 Laravel 5.x » ВебСокеты (Laravel 5.4 + Socket.io + Node.js + Redis) - нужна помощь » 04.08.2017 19:08:40

aanon
Ответов: 2

Всем привет. Очень нужно объяснение одной проблемы, попробую коротко.

Начну с задачи: нужно сделать поисковую выдачу на вебсокетах. То есть пользователь ввел запрос, браузер соединился по вебсокету с сервером, при нахождении очередного результата сервер отправляет его браузеру и браузер отображает. Вебсокет нужен потому, что поиск может длиться хоть полчаса (очень большое количество разных источников), и использовать тут ajax я не хочу (чтобы не опрашивать сервер постоянно и не нагружать его), а просто загрузка страницы и вовсе исключена в силу постановки самой задачи (долгое время выполнения). Очень привлекательной выглядит событийная модель вебсокета, в общем.

Теперь о проблеме. Я прочитал и просмотрел много материалов про связку, которая, видимо, самая популярная. Ставится node.js, в браузер грузится socket.io. Браузер общается с node.js. Сам node.js общается с laravel через redis. Laravel броадкастом рассылает ивент с именем канала, он (видимо), пишется в redis, а node.js слушает redis, подхватывает новый ивент и рассылает его всем браузерам, слушающим этот канал.

Но мне нужно:

а) Передать параметры поиска в Laravel из браузера
б) Вернуть результат обработки от Laravel конкретному браузеру, а не всем подряд вообще

Пункт "б" вообще нигде не раскрывается. Если пользователь не авторизован, то совершенно (мне) не понятно как laravel будет передавать что-то ему, ведь о том, кто именно запрашивает результат laravel не знает.

Я нигде не могу найти ответы на эти вопросы и даже не понимаю, туда ли я двигаюсь. Кто-нибудь сталкивался, может подсказать?

Извините, если сумбурно написал, под вечер каша в голове.

#11 Laravel 5.x » Какой RBAC вы используете? » 05.07.2017 22:01:46

aanon
Ответов: 7

Добрый день, друзья.

Понадобился rbac. Ну или его простая реализация. Нужны роли и у роли должен быть доступ к тому или иному контроллеру. Кроме того, назначение сразу двух ролей (с доступом в админку и без нее). Не хочется городить костыли и хочется, чтобы решение было более гибким, например, если понадобится добавить пермишны и сложные условия.

Подскажите, что попроще и что вы используете?

#12 Re: Laravel 5.x » Слеш в конце URL » 20.06.2016 09:31:32

AlexeyMezenin пишет:

The Laravel Way - создать helpers.php в нем разместить свою функцию-помощника (helper)

Спасибо! Думаю, тему можно закрывать на этом smile

#13 Re: Laravel 5.x » Слеш в конце URL » 20.06.2016 05:15:32

Proger_XP пишет:

А в чём смысл этой затеи?

Да просто есть один сайт, где страницы уже со слешем. Я хочу перевести его на фреймворк. Но я не хочу делать километровый список редиректов или (не дай бог вообще!) переиндексацию в поисковых системах. Для них-то это разные адреса.

А как мне правильно написать свою функцию url()? UPD: Вернее, куда положить ее?

#14 Re: Laravel 5.x » Слеш в конце URL » 19.06.2016 15:36:03

Proger_XP пишет:

С какой радости Apache редиректит URL c / на URL без /? Обратное - да, если это папка и URL не заканчивается на /, то будет редирект. nginx делается ровно то же самое.

aanon, надо смотреть лог запроса. В Firefox открыть private tab, открыть Firebug или обычные developer tools (ctrl+shift+i), дальше вставить URL со слэшем и смотреть вывод, потом убрать весь код Laravel из public и сравнить. Если редирект от сервера, то он будет в обоих случаях (уверен, что дело не в нём).

Private Mode нужен для отключения кэширования редиректов, которое Firefox делает для 301.

Благодарю, уважаемый. Я уж было подумал, что тут даже темы не читают.

Я вот тут подробнее отписал: https://laravel.ru/forum/viewtopic.php?pid=7754#p7754

Дело вовсе не в редиректах от веб-сервера. Nginx по умолчению позволяет открыть и адрес /test и адрес /test/. Апач можно настроить (вернее - отключить редирект с /test/ на /test в .htaccess) и заработают оба адреса.

Вопрос не в том, что делать с веб-сервером, с ним ничего делать не надо. Updated: Не надо ничего делать потому, что если прописать это на уровне веб-сервера, то все адреса без слеша получат редирект на адреса со слешем. Поисковик сойдет с ума - весь сайт состоит из редиректов О_о

Вопрос в том, как в Laravel по умолчанию правильно задать поведение: "генерировать URL'ы со слешем на конце" и возможно ли это вообще. Я с ним работаю всего неделю и информацию найти не смог.

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

Может быть вы мне подскажете немного другое: вот есть файл в вендоре (/src/Illuminate/Routing/UrlGenerator.php), я хочу его заменить своим. Очевидно, что нельзя менять его в вендоре, ведь при следующем composer update мои изменения будут затерты (я уже молчу о том, что в git'е вендор не лежит вообще). Как правильно мне изменить его?

#15 Re: Laravel 5.x » Слеш в конце URL » 18.06.2016 16:53:20

hzone пишет:

не факт что нужно костыли, даже не факт, что нужно что-то делать ;-)

Вы или знаете и скажите или не знаете и не надо напускать загадочность smile)

#16 Re: Laravel 5.x » Слеш в конце URL » 17.06.2016 18:34:03

Ок, можно попробовать отредактировать вот этот файл: https://github.com/laravel/framework/bl … #L493-L504

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

#17 Re: Laravel 5.x » Слеш в конце URL » 17.06.2016 11:03:34

hzone пишет:

апач действительно делает дополнительный редирект, ибо его ожидания не совпадают с реальностью.
я лично давно на nginx сижу.

Без проблем. А сделать-то как то, что я хочу? Я выше описал ситуацию с nginx.

#18 Re: Laravel 5.x » Слеш в конце URL » 17.06.2016 10:53:30

Stokke пишет:

Ну так это стало быть Апач делает rewrite. Значит надо задать новое правило для твоей страницы, чтобы он воспринимал этот слэш.

Я не совсем об этом. Дело не только в роутах. Например, я настроил nginx так, что он обрабатывает адреса и со слешем и без слеша и редиректа не происходит. Но когда я создаю URL:

Route:

Route::get('/test/', ['as' => 'test'], function () {
    return "test";
});

View:

<p> {{ url('test') }} </p>

То я получаю URL вида:

site.ru/test

вместо

site.ru/test

Чтобы было совсем понятно. Например, в Yii2 можно задать suffix для урлов в настройках роутера. И тогда все урлы автоматически получат этот суффикс в конце. И указываю в роуте "test" на деле будет URL вида "test.html".

Updated:

И нет, если сделать:

{{ url('test/') }}

То это ничего не меняет (насколько я понимаю - это альяс в данном контексте, а не конкретный URL).

#20 Re: Laravel 5.x » Не работает шаблонизатор blade » 17.06.2016 08:44:54

Serj пишет:

Приветствую всех, проблема с Blade шаблонизатором. Никак он не работает. И кодировки менял и перепроверял может где ошибка в ситаксисе, никак не могу через @yield подключить секции (с путями тоже все перепроверил). Не могу нигде найти документацию по таким ошибкам, была ли у кого практика с такой фитчей ? Подскажите пожалуйста.

Не обязательно дублировать пост, тут все равно полтора инвалида smile
https://laravel.ru/forum/viewtopic.php?id=1662

#21 Re: Laravel 5.x » Шаблонизатор Blade не дает покоя. » 17.06.2016 08:41:35

Покажите контроллер (или роут).
Наводящий вопрос: вы точно view('for') делаете, а не view('start')?

Только что воспроизвел у себя, все работает нормально. Вьюхи ваши просто скопировал, в роуте:

Route::get('/test', function () {
    return view('for');
});

Ну и логи посмотрите, конечно.

#22 Re: Laravel 5.x » Админка? » 17.06.2016 03:17:44

BMTH пишет:
aanon пишет:

Назрел еще один вопрос, на который не нашел однозначного ответа. Как мне самостоятельно разделить сайт на frontend и backend? Есть какие-нибудь общепринятые практики?

Route::group(['prefix' => 'admin', 'namespace' => 'путь до папки где лежат контроллеры для бекенда', 'middleware' => ['auth']], function() {
// Тут роуты для админки
});

Спасибо большое! smile Как ни странно, дошел до этого сам и скоро попробую натянуть туда AdminLTE.

#23 Re: Laravel 5.x » Админка? » 17.06.2016 03:17:12

hzone пишет:

--resource в 5.2 появился.
обновляйся

Обновился. И выясняется, что этот флаг не генерит CRUD, он тупо генерит не пустой контроллер. И всё? hmm

#24 Laravel 5.x » Слеш в конце URL » 17.06.2016 03:14:23

aanon
Ответов: 19

Добрый день.

Как сделать URL вида не "site.ru/test", а "site.ru/test/"?
Возник вопрос, не могу нагуглить. Смотрите. Например, я хочу создать страницу /test.html, я пишу роут:

Route::get('/test/.html', function () {});

Всё работает и всё отлично. Но если я хочу закончить не .html, а слешем, то у меня происходит переадресация с адреса со слешем на адрес без слеша и вот такая запись ни на что не влияет:

Route::get('/test/', function () {});

При этом непонятно отдельно, как быть с роутами вида, где слеш означает не окончание строки, а как бы индексный файл:

Route::get('/', function () {});

Что делать? Как сделать URL вида не "site.ru/test", а "site.ru/test/"?

#25 Re: Laravel 5.x » Админка? » 14.06.2016 08:05:59

Назрел еще один вопрос, на который не нашел однозначного ответа. Как мне самостоятельно разделить сайт на frontend и backend? Есть какие-нибудь общепринятые практики?

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