Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
- Профит был бы, если писать просто asset(’images/articles’), а он уже сам смотрит в env(’THEME’).
Так можно это в мутаторе сделать
public function getThemeAttribute()
{
return asset(env('THEME') . '/images/articles/');
}
А потом (( $modelName->theme }}
Или как сказал Алексей, сделай метод
public function getImage($image)
{
return asset(env('THEME') . '/images/articles/' . $image);
}
Класть эти изображения в хранилище (storage), и к примеру по роуту /image/get/123 отдавать это изображение. Перед отдачей проверять пользователя на возможность скачивать изображения. Ну а способов проверки масса, можно группы сделать, или тупо столбец в таблицу users добавить типо is_subscriber tinyint(1) default(0) и когда пользователь купил подписку, то ставить в это поле 1
- Очевидно — будет.Я делал так-же, ко всем моделькам еще глобальный скоуп добавил (по аналогии с SoftDelete)
- А как тогда с гитом будешь это все совмещать? Если проекты можно добавлять автоматически, как-то не очень выходит.
Об этом я как то и не подумал)
- Я конфиги держал в БД и при бутстрапе проекта — перезаписывал (не физически, а устанавливал новые значения во время исполнения).По нагрузке — не парился, в моем случае это было позволительно.
Хотелось бы найти золотую середину что б не было сильной нагрузки.
Тогда можно оставить все конфиги, некоторые значения перенести в базу (таймзона, локаль, сервисы), и как то заставиь лару чекать эти значения из таблици каждого проекта.
Не сразу заметил что в отдельную тему вынесли))
- Не видя полные scope для моделей, не смогу что-то посоветовать. Если у тебя репозиторий публичный, скинь в личку.
Репозитория нет, все на локалке.
/**
* Filtering The Resource
*
* @param $query
* @param Request $request
*/
public function scopeFilter($query, Request $request)
{
if($request->has('reset'))
{
$request->session()->forget($this->table . '.filter');
}
else {
if ($request->input('filter.*'))
$request->session()->put($this->table . '.filter', $request->input('filter'));
$request->session()->has($this->table . '.filter.id') ? $query->where('id', $request->session()->get($this->table . '.filter.id')) : Null;
$request->session()->has($this->table . '.filter.name') ? $query->where('name', 'LIKE', '%' . $request->session()->get($this->table . '.filter.name') . '%') : Null;
if ($request->input('sort.*'))
$request->session()->put($this->table . '.sort', $request->input('sort'));
$query->orderBy($request->session()->get($this->table . '.sort.column', 'id'), $request->session()->get($this->table . '.sort.type', 'asc'));
if ($request->input('per_page'))
$request->session()->put($this->table . '.per_page', $request->input('per_page'));
}
}
Я говорил про эти запросы PHP$query->where('id', $request->session()->get($this->table . '.filter.id'))
, они повторяются практически в каждой модели (id, name, position, created_at). Вот я и думаю, может как то все в один огромный скоуп обьединить, и вынести в трейт с проверкой PHP$request->session()->has($this->table . '.filter.name')
?
- Кстати, ты можешь существенно повысить читаемость кода, если будешь использовать:
Добрый вечер.
Хочу попробовать сделать какой нибудь SaaS (т.к. ни разу такие не писал), что то типо shopify или tiu ru или crm.
Большенство пишутся на рельсах, но тк в рельсах нет опыта, попробую на ларе.
Хотелось бы прояснить несколько вопросов:
1) как быть с конфигами?
Путем гуглегия понял, что можно перезаписывать файлы конфига на каждом реквесте. Но мне кажется это не нормально. Думаю может лучше так: отнаследовать класс Application, и назначать путь к конфигам каждого проекта, а название проекта брать из урла config/$projectName/app.php, services.php...
2) База данных.
Собираюсь сделать так: добавить к каждой таблице project_id. При большем кол-стве данных в базе, не будит ли это замедлять работу?
Вроде пока только эти вопросы возникли. Будит круто услышать ваше мнение.
Спасибо.
- Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.
Значит это нормальная практика использовать хелперы вместо фасадов в представлении?
И есть еще вопрос. Вот у меня в админке, у каждого круд контроллера есть свой фильтер. И почти у всех повторяется фильтрация по полям id, created_at и частично name. Но есть дополнительные фильтры по отличающимся полям.
Сейчас у каждой модели есть скоуп filter, который осуществляет фильтрацию. И в каждой модели повторяются вот эти строки
if($request->has('reset'))
{
$request->session()->forget( $this->table . '.filter');
}
$request->session()->has($this->table . '.filter.id') ? $query->where('id', $request->session()->get($this->table . '.filter.id')) : Null;
$request->session()->has($this->table . '.filter.name') ? $query->where('name', 'LIKE', '%' . $request->session()->get($this->table . '.filter.name') . '%') : Null;
// ...
if ($request->input('per_page'))
$request->session()->put($this->table . '.per_page', $request->input('per_page'));
Думаю можно этот скоуп вынести в трейт. но как быть с полями которые у каждого круд контроллера уникальные? Как то надо пропустить фильтрацию по полю, которого нет в реквесте. Но тогда этот метод разрастется ого-ого как…
Интересная тема! Спасибо.
А что насчет фасадов? Точнее, использование их в шаблонах. Я не особо люблю фасады,по этому стараюсь передавать в шаблон обьект. К примеиу для фильтрации в категориях вместо href="{{ Request::fullUrlWithQuery(['a' => 'b']) }}" мне удобнее href="{{ $request->fullUrlWithQuery(['a' => 'b']) }}"
// Модель product
public function setAliasAttribute($value)
{
$this->attributes['alias'] = str_slug($value);
}
public function scopeFindByAlias($q, $alias)
{
return $q->whereAlias($alias)->first();
}
public function index($alias)
{
$products = Product::findByAlias($alias);
return view('site.product',compact(''products'));
}
- Узнаешь — расскажи)
- Ни разу не видел таких показателей.
На этом сервере 3 сайта на prestashop. Может из-за них? Хотя они работают шустро.
php версии 5.6, ларавел версии 5.4.30.
Скрин http://imgur.com/NBixgOD
И заголовки если они чем то помогут)
Request .. Request Method:GET Status Code:200 OK Remote Address: Referrer Policy:no-referrer-when-downgrade Response Headers view source Cache-Control:no-cache, private Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection:Keep-Alive Content-Type:text/html; charset=UTF-8 Date:Fri, 25 Aug 2017 09:41:58 GMT Expires:Thu, 19 Nov 1981 08:52:00 GMT header_name:header_value Keep-Alive:timeout=5, max=100 Pragma:no-cache Server:Apache Set-Cookie:XSRF-... expires=Sat, 26-Aug-2017 09:41:58 GMT; Max-Age=86400; path=/ Set-Cookie: ... expires=Sat, 26-Aug-2017 09:41:58 GMT; Max-Age=86400; path=/; httponly Transfer-Encoding:chunked Vary:Accept-Encoding X-Content-Type-Options:nosniff X-XSS-Protection:1; mode=block Request Headers view source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding:gzip, deflate Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Cookie:...; PrestaShop-... Host: Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
Добрый вечер.
Я немогу понять, почему то ларавел использует по 24 (это минимум) — 27 метров оперативы на клудфлейревском сервере. Конфиг сервера к сожалению немогу сказать, тк сервер не мой.
Взял у местного хостера (Узбекский хостер) сервер самый слабый для проверки. На нем то же приложение использует от 2 до 8 мегабайт. Ито 8 редко бывает, в основном 4. На локальном сервере точно так же. От 2 до 8 метров.
С чем это связано?
Судя по названию функции, она загружает изображения. Я вообще создал бы папку services (app\Services) а там уже класс с нужным функционалом к примеру FileUploader (в этот класс потом можно будит еще добавить доп методы к примеру для создания миниатюр). А потом в любом месте где нужно PHPuse App\FileManager
и PHPFileManager::upload($request->filename);
Насколько я понял, задача звучит примерно так: имеется x атрибутов (size, color, height …), у этих x атрибутов есть y значения (S, M, XS, Red, Blue…), на сервер отправляются только идентификаторы значений?
В итоге должно получиться примерно так:
#1 Мужская футболка 300 руб - #5 400 руб --- Размер: XL, Цвет: белый - #6 400 руб --- Размер: L, Цвет: белый - #7 400 руб --- Размер: S, Цвет: белый ...
Если я вас правильно понял, то можно попробовать запрос типо
$values = AttributeValues::whereIn('id', $request->values_id)->get();
А потом сгруппировать их по attribute_id (по id атрибута к которому относятся значения), или сразу в запросе группировать. Потом уже в цикле должно получиться