Laravel по-русски

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

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

#52 Re: Хорошие практики (FAQ) » Вопросы по стилю » 22.11.2017 10:46:20

  1. А хорошо ли положить трейты прямо в ту папку где модели? Типа BillableTrait.php

Создай папку Traits в каталоге app, и туда ложи все трейты

#53 Re: Laravel 5.x » Хелпер asset » 22.11.2017 10:43:49

  1. Профит был бы, если писать просто asset(’images/articles’), а он уже сам смотрит в env(’THEME’).

Так можно это в мутаторе сделать

PHP
public function getThemeAttribute()
{
    return 
asset(env('THEME') . '/images/articles/');
}

А потом (( $modelName->theme }}
Или как сказал Алексей, сделай метод

PHP
public function getImage($image)
{
    return 
asset(env('THEME') . '/images/articles/' $image);
}

#54 Re: Laravel 5.x » как организовать продажу файлов (цифрового контента) » 21.11.2017 17:51:32

Класть эти изображения в хранилище (storage), и к примеру по роуту /image/get/123 отдавать это изображение. Перед отдачей проверять пользователя на возможность скачивать изображения. Ну а способов проверки масса, можно группы сделать, или тупо столбец в таблицу users добавить типо is_subscriber tinyint(1) default(0) и когда пользователь купил подписку, то ставить в это поле 1

#55 Re: Laravel 5.x » транслитерация и создание slug » 17.11.2017 20:17:43

Ого, столько телодвижений…
Можно написать аналогичную функцию str_slug() на js, и не надо никаких запросов даже делать

#56 Re: Хорошие практики (FAQ) » Использование фасадов в шаблонах » 17.11.2017 10:20:18

  1. Попробуй это,

Они не подходят, тк они будут применяться сразу в любой выборке, а писать каждый раз withoutGlobalScopes не очень хочется. Решил все в трейт перенести

#57 Re: Laravel 5.x » SaaS » 16.11.2017 23:22:59

  1. Очевидно — будет.Я делал так-же, ко всем моделькам еще глобальный скоуп добавил (по аналогии с SoftDelete)

Ага, с этим все понятно.

  1. А как тогда с гитом будешь это все совмещать? Если проекты можно добавлять автоматически, как-то не очень выходит.

Об этом я как то и не подумал)

  1. Я конфиги держал в БД и при бутстрапе проекта — перезаписывал (не физически, а устанавливал новые значения во время исполнения).По нагрузке — не парился, в моем случае это было позволительно.

Хотелось бы найти золотую середину что б не было сильной нагрузки.

Спасибо за ответ!

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

#58 Re: Хорошие практики (FAQ) » Использование фасадов в шаблонах » 16.11.2017 23:10:14

Не сразу заметил что в отдельную тему вынесли))

  1. Не видя полные scope для моделей, не смогу что-то посоветовать. Если у тебя репозиторий публичный, скинь в личку.

Репозитория нет, все на локалке.

PHP
    /**
     * Filtering The Resource
     *
     * @param $query
     * @param Request $request
     */
    
public function scopeFilter($queryRequest $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')?

  1. Кстати, ты можешь существенно повысить читаемость кода, если будешь использовать:

ыНачал уже все исправлять)

#59 Laravel 5.x » SaaS » 16.11.2017 22:08:27

TrueKanonir
Ответов: 2

Добрый вечер.
Хочу попробовать сделать какой нибудь SaaS (т.к. ни разу такие не писал), что то типо shopify или tiu ru или crm.
Большенство пишутся на рельсах, но тк в рельсах нет опыта, попробую на ларе.
Хотелось бы прояснить несколько вопросов:
1) как быть с конфигами?
Путем гуглегия понял, что можно перезаписывать файлы конфига на каждом реквесте. Но мне кажется это не нормально. Думаю может лучше так: отнаследовать класс Application, и назначать путь к конфигам каждого проекта, а название проекта брать из урла config/$projectName/app.php, services.php...
2) База данных.
Собираюсь сделать так: добавить к каждой таблице project_id. При большем кол-стве данных в базе, не будит ли это замедлять работу?

Вроде пока только эти вопросы возникли. Будит круто услышать ваше мнение.
Спасибо.

#60 Re: Хорошие практики (FAQ) » Использование фасадов в шаблонах » 07.11.2017 23:02:26

  1. Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.

Значит это нормальная практика использовать хелперы вместо фасадов в представлении?

И есть еще вопрос. Вот у меня в админке, у каждого круд контроллера есть свой фильтер. И почти у всех повторяется фильтрация по полям id, created_at и частично name. Но есть дополнительные фильтры по отличающимся полям.
Сейчас у каждой модели есть скоуп filter, который осуществляет фильтрацию. И в каждой модели повторяются вот эти строки

PHP
    if($request->has('reset'))
    {
        
$request->session()->forget$this->table '.filter');
    }

и эти

PHP
    $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'));

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

#61 Хорошие практики (FAQ) » Использование фасадов в шаблонах » 07.11.2017 07:09:29

TrueKanonir
Ответов: 6

Интересная тема! Спасибо.
А что насчет фасадов? Точнее, использование их в шаблонах. Я не особо люблю фасады,по этому стараюсь передавать в шаблон обьект. К примеиу для фильтрации в категориях вместо href="{{ Request::fullUrlWithQuery(['a' => 'b']) }}" мне удобнее href="{{ $request->fullUrlWithQuery(['a' => 'b']) }}"

#62 Re: Laravel 5.x » Как сделать выборка с условием и исключением! » 07.11.2017 06:59:07

PHP
$users->whereHas('buyProduct', function($q){
  
$q->where('product_id''<>'5);
})->
get();

Немогу в данное время проверить, но по идеи должно сработать
Или еще whereNotIn можно попробовать.

#63 Re: Laravel 5.x » Передача параметров в контроллер из view » 05.09.2017 19:48:36

Нпдо добавить в форму {{ csrf_field() }}
И метод createTast статический

PHP
public function store(Requests\TaskPublishRequest $taskPublishRequestTask $task)
{
    
$task Task::createTask($taskPublishRequest);
}

И что за ошибка выходит?

#64 Re: Laravel 5.x » Проблеми с виборкой и ЧПУ » 26.08.2017 20:24:23

  1. во-первых тут я бы написал firstOrFail

Согласен. В живом проекте у самого firstOrFail(), тут почему то first() написал:|

  1. во-вторых изобретать скоупы только для того чтобы выбирать каким-то способом модели в маршрутах – это по-моему излишне

Всегда так делал, н когда с этим проблем не возникало.

#65 Re: Laravel 5.x » Проблеми с виборкой и ЧПУ » 25.08.2017 21:46:50

PHP
// Модель product
public function setAliasAttribute($value)
{
    
$this->attributes['alias'] = str_slug($value);
}

public function 
scopeFindByAlias($q$alias)
{
    return 
$q->whereAlias($alias)->first();
}

Затем в контроллере

PHP
public function index($alias)
{
    
$products Product::findByAlias($alias);

    return 
view('site.product',compact(''products'));
}

#66 Re: Laravel 5.x » Ларавел жрет много оперативы » 25.08.2017 12:57:15

  1. Узнаешь — расскажи)

Отпишусь как узнаю

  1. Ни разу не видел таких показателей.

Аналогично.

На этом сервере 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

#67 Laravel 5.x » Ларавел жрет много оперативы » 25.08.2017 00:02:55

TrueKanonir
Ответов: 4

Добрый вечер.
Я немогу понять, почему то ларавел использует по 24 (это минимум) — 27 метров оперативы на клудфлейревском сервере. Конфиг сервера к сожалению немогу сказать, тк сервер не мой.
Взял у местного хостера (Узбекский хостер) сервер самый слабый для проверки. На нем то же приложение использует от 2 до 8 мегабайт. Ито 8 редко бывает, в основном 4. На локальном сервере точно так же. От 2 до 8 метров.
С чем это связано?

#68 Re: Laravel 5.x » Загрузка изображения на сервер при добавлении статьи » 24.08.2017 00:18:52

Установить фаил менеджер для редактора https://github.com/UniSharp/laravel-filemanager (первое что выдал гугл)

#69 Re: Laravel 5.x » whereHas вместе с with » 24.08.2017 00:14:31

  1. Но этот способ делает 2 больших запроса…

Ну это нормально. Иначе сдесь никак не аделать. Ток менять структуру бд

#70 Re: Laravel 5.x » Добавить функцию в Eloquent Model » 24.08.2017 00:11:22

Судя по названию функции, она загружает изображения. Я вообще создал бы папку services (app\Services) а там уже класс с нужным функционалом к примеру FileUploader (в этот класс потом можно будит еще добавить доп методы к примеру для создания миниатюр). А потом в любом месте где нужно PHPuse App\FileManager и PHPFileManager::upload($request->filename);

#71 Re: Laravel 5.x » Ошибка TokenMismatchException in VerifyCsrfToken.php line 68: » 30.07.2017 21:15:48

  1. не подключено что обрабатывает

Ну так формат не html должен быть а forma.php или forma.blade.php что бы использовать шаблонизатор

#72 Re: Веб-разработка » Laravel роуты web и api » 30.07.2017 18:59:18

Ну так в чем проблема?
Создать контроллер BackendPostApiController положить его в папку Api, а в нем уже

PHP
// ...
return response()->json($posts);

#73 Re: Laravel 5.x » Ошибка TokenMismatchException in VerifyCsrfToken.php line 68: » 30.07.2017 18:53:20

  1. Так оно же отобразится на экране… (((

Это же скрытое поле,оно не будит видно пользователю. Только через просмотр кода можно увидеть

#74 Re: Laravel 5.x » Не знаю как правильно сделать » 30.07.2017 18:50:36

  1. Но этот варриант не подходит

Больше в голову ничего не приходит) может другие что подскажут

#75 Re: Laravel 5.x » Не знаю как правильно сделать » 29.07.2017 19:54:30

Насколько я понял, задача звучит примерно так: имеется x атрибутов (size, color, height …), у этих x атрибутов есть y значения (S, M, XS, Red, Blue…), на сервер отправляются только идентификаторы значений?
В итоге должно получиться примерно так:

#1 Мужская футболка 300 руб
 - #5 400 руб
 --- Размер: XL, Цвет: белый
 - #6 400 руб
 --- Размер: L, Цвет: белый
 - #7 400 руб
 --- Размер: S, Цвет: белый
...

Если я вас правильно понял, то можно попробовать запрос типо

PHP
$values AttributeValues::whereIn('id'$request->values_id)->get();

А потом сгруппировать их по attribute_id (по id атрибута к которому относятся значения), или сразу в запросе группировать. Потом уже в цикле должно получиться

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