Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Спасибо за труд. В целом все хорошо описано для начинающего, а вот с именованием столбцов в бд вопрос довольно относительный и в зависит от используемой бд. Например, работая с sqlserver практически всегда имена полей в camel case с ключами вида ИмяМоделиId или ИмяМоделиID.
SPR, это конечно хорошо. Но, если у вас очень простое приложение и метод контроллера укладывается в 10-15 строк без необходимости где-либо переиспользовать, то не вижу смысла размазывать код, усложняя себе жить и плодить кучу классов.
Ко всем бест практикам нужно прийти, а это понимание появляется отнюдь не сразу. Например, поставил задачу перед жуниором написать простой парсер хмл, на базе уже существующего кода. В примере использовались интерфейсы, абстрактные классы, инжектились через ioc. Так вот он пытался по строкам сделать тоже самое буквально и шаг влево, шаг вправо - пожимал плечами, мол не знаю, не работает и тд.
На практике часто использую Request только в контроллере, сформировал нужный мне пакет (это или класс или массив, вопрос предпочтений)
/**
* Return pagination list of the apartments
* @param Request $request
* @param $language
* @param int $page
* @param int $pageSize
* @return \Illuminate\Http\JsonResponse
*/
public function getApartmentsJson(Request $request, $language, $page = 1, $pageSize = 10)
{
$pLang = $this->getLanguage($language);
//get filter value
$data = $request->all();
$request = (new ApartmentRequest())
->setReference(array_get($data, 'reference'))
->setTypeOperation(array_get($data, 'typeOperation'))
->setTypeApartment(array_get($data, 'typeApartment'))
->setProvince(array_get($data, 'province'))
->setAreaPlotMin(array_get($data, 'areaPlotMin'))
->setAreaPlotMax(array_get($data, 'areaPlotMax'))
->setBedrooms(array_get($data, 'bedrooms'))
->setPriceMin(array_get($data, 'priceMin'))
->setPriceMax(array_get($data, 'priceMax'))
->setOrderBy(array_get($data, 'orderBy'));
return response()->json($this->getApartments($request, $pLang, $page, $pageSize));
}
И дальше пакет гоняю как захочется.
/**
* Return list of the apartments, using request can use filter and order functionality
* @param ApartmentRequest $request
* @param PLanguage $language
* @param int $page
* @param int $pageSize
* @return ApartmentResult
*/
public function getApartments(ApartmentRequest $request, PLanguage $language, $page = 1, $pageSize = 1)
{
if($pageSize > 50)
$pageSize = 10;
$shortName = $language->shortName;
$builder = $this->builder($request);
// if run after get() return 0;
$countRow = $builder->count();
$client = Auth::user();
$transformer = new ApartmentTransformer();
$apartments = $builder->skip(($page - 1) * $pageSize)->take($pageSize)->get()->transform(function(Apartment $item) use ($transformer, $shortName, $client) {
return $transformer->transformBasic($item, $shortName, $client);
});
$result = new ApartmentResult($apartments, new Page($countRow, $page, $pageSize), $language);
return $result;
}
Изменено lodar (04.11.2017 07:21:30)
Не в сети
В целом все хорошо описано для начинающего, а вот с именованием столбцов в бд вопрос довольно относительный и в зависит от используемой бд. Например, работая с sqlserver практически всегда имена полей в camel case с ключами вида ИмяМоделиId или ИмяМоделиID.
Разве нельзя использовать snake_case?
SPR, это конечно хорошо. Но, если у вас очень простое приложение и метод контроллера укладывается в 10-15 строк без необходимости где-либо переиспользовать, то не вижу смысла размазывать код, усложняя себе жить и плодить кучу классов.
Согласен. Но ависит от того, что именно в этих 10-15 строках.
Не в сети
Разве нельзя использовать snake_case?
Можно конечно, но если у вас структура бд уже создана не вами или возможно предполагается использовать бд совместно с другими сервисами написанными на c# например. Там есть свои договоренности и по именованию полей, методов и свойств. Конечно все можно переопределить атрибутами и тд, но зачем? Я работаю очень часто с laravel и asp.net, net core, поэтому для меня использовать кэмел кейс как-то более эстетично. Это все субьективно и зависит от команды разработчиков.
Не в сети
Можно конечно, но если у вас структура бд уже создана не вами или возможно предполагается использовать бд совместно с другими сервисами написанными на c# например. Там есть свои договоренности и по именованию полей, методов и свойств. Конечно все можно переопределить атрибутами и тд, но зачем? Я работаю очень часто с laravel и asp.net, net core, поэтому для меня использовать кэмел кейс как-то более эстетично. Это все субьективно и зависит от команды разработчиков.
Спасибо за разъяснение. Если нет прямых требований использовать camelCase, то лучше все-таки использовать snake_case, чтобы полностью использовать магические методы Laravel, читатели и преобразователи (accessors и mutators), краткие определения связей без указывания конкретных наименований столбцов и т.д.
Не в сети
Страницы 1