Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
nginx в директиве server: root /usr/share/nginx/html/test/public/;
Обязательно в конце указывать /
Добрый день! Подскажите, пожалуйста, не могу разобраться.
Ситуация такая: есть приложение на laravel. Работает морда, при переходе на http://192.168.0.101/test/public вижу её. Добавлен маршрут в api. При переходе на http://192.168.0.101/test/public/index.php/api/v1/tests получаю 404
Если запустить php artisan serve —host 0.0.0.0 то все работает на порту 8000: и апи http://192.168.0.101:8000/api/v1/tests и морда http://192.168.0.101:8000/
В чем косяк? Не могу найти как сделать, чтобы апи работало без php artisan serve —host 0.0.0.0
сервер nginx, php v7.0.25, сервер на виртуальной машине centos 7
Итак, все перепроверил, поправил и по итогу время выполнения одних и тех же тестов (6 из 80) выполняется теперь за 25 сек, вместо 35 сек.
@Baldal, спасибо!
Может быть, еще можно как-то ускорить процесс?
Для таблиц тестовой БД можно использовать MEMORY storage engine.
А есть какие-либо мануалы по этой теме?
Ну, то есть, я попробовал у всех таблиц указать $table->engine = 'MEMORY';
Потом изменил везде типы text на varchar, потому что не поддерживаются blob/text
Потом урезал где данные больше 255 символов
И все равно получил левые ошибки там, где раньше они не возникали, например, связанные с аутентификацией.
Буду копать, спасибо.
Здравствуйте!
Для прогона тестов использую phpunit.
Использовал с sqlite - все было отлично, тесты выполнялись быстро. Но с усложнением запросов столкнулся с надобностью перейти с sqlite на mysql, т.к. sqlite не поддерживала некоторый синтаксис запросов, из-за чего тесты стали бесполезными.
С реальной бд mysql скорость запросов очень сильно упала, т.к. как я понимаю, перед каждым тестом laravel дропает все табилицы с тестовым набором и создает их заново.
Подскажите, пожалуйста, как можно ускорить процесс тестирования?
Спасибо!
Bender, спасибо за ответ!
Сейчас все решения, что у меня есть сводятся к одному: добавлять join к каждому запросу для получения нужного результат.
Если честно, думал, что есть более элегантные и "правильные" решения этому вопросу.
Спасибо за наводку, прочитаю так же про global scope.
Здравствуйте!
Схема приложения такая: имеются пользователи, которые создают кампании. У кампании есть зависимые сущности. Например, компания имеет офис, офис связан с заказом. Заказ связан с исполнителем, который напрямую связан с компанией.
Как правильно сделать так, чтобы авторизованный пользователь видел только свои экземпляры сущностей?
Например, вывести все заказы исполнителя такого-то.
Усложняет все тот момент, что сущностей много, все методы и взаимодействие уже прописано. Как решить этот вопрос с наименьшими временными потерями и не нарушить архитектуру?
Архитектура приложения простая:
контроллеры -> бизнес-слой -> репозитории -> модель
Laravel Framework 5.4.11
PHP 7.0.14-2+deb.sury.org~xenial+1
Zend OPcache v7.0.14-2+deb.sury.org~xenial+1
Centos 7
MySQL 5.5.54-0+deb8u1
Apache/2.4.10 (Debian)
Здравствуйте!
Для решения задачи привожу структуру взаимодействия контроллеров и бд:
Контроллер (получение входных данных и передача в бизнес-слой) -> слой бизнес-логики (все действия над входными данными и запросы к модели) -> модель
Итак, стоит задача: при создании нового объекта сущности (методы которой находятся в контроллере) создавать 2 соответствующие записи в других БД.
Конкретно - имеется контроллер OfficeNumbers, при создании нового создать запись в БД asterisk и kamailio.
Сейчас делаю так:
в контроллере делаю
1.запрос на создание записи
2.запрос на создание записи в бд asterisk и kamailio
В бизнес-слое:
1. подключаю модели таблиц бд asterisk и kamailio, providers
2. Получаю список необходимых параметров из модели providers
3. Делаю необходимые вычисления и записываю данные через модель в бд asterisk и kamailio
Вопрос: как грамотно сделать так, чтобы при возникновении проблем с добавлением в одну из таблиц отменялись изменения во всех затронутых таблицах и вообще уместны ли такие действия?
То есть, понимаю, что нужно использовать транзакции, но нашел примеры с использованием транзакций при запросах непосредственно напрямую к БД. Притом интересует, правильно ли разделил действия, либо нужно было в контроллере выполнить один запрос на создание данных, а уже внутри этого запроса делать вставку записей в asterisk и kamailio
В контроллере:
$arUpdate = Array(
// какие-то поля
);
if (!$arResult['id'] = $this->businessLayer->getIdFromUpdate($arUpdate))
{
throw new ApiException("Error INSERT OfficeNumber");
}
if (!$arResult['insert_to_asterisk'] = $this->businessLayer->getIdFromUpdateOffNum($arUpdate))
{
throw new ApiException("Error INSERT OfficeNumber to asterisk/kamailio");
}
В бизнес-слое:
public function getIdFromUpdateOffNum($arUpdate)
{
$providers_model = new ProvidersModel();
$providers_repository= new ProvidersRepository($providers_model);
$asterisk_model = new AsteriskSipfriendsModel();
$asterisk_repository = new AsteriskSipfriendsRepository($asterisk_model);
$kamailio_model = new KamailioUacRegsModel();
$kamailio_repository = new KamailioUacRegsRepository($kamailio_model);
if (count($arProviders = $providers_repository->getById($arUpdate['provider_id']))) {
$arParameters = json_decode($arProviders['config'], true);
if ($asterisk_repository->getIdFromUpdate($arParameters))
{
if ($arProviders['require_reg'] == 'yes') {
$arCamailioUpdate = Array(
//какие-то параметры
);
return $kamailio_repository->getIdFromUpdate($arCamailioUpdate);
}
return true;
}
return false;
}
return false;
}
В данный момент все работает, интересует именно как сделать правильно.
Спасибо!
Страницы 1