Laravel по-русски

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

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

#2 Laravel » Свойства » 17.09.2018 00:45:41

Wizardev
Ответов: 1

Подскажите пакеты для свойств товара

#3 Re: Laravel 5.x » Добавить-исключить get параметры из текущего адреса » 12.09.2018 14:25:43

сорямба, разобрался

единственное хотелось бы чистит ? если query пуст

function full_url (array $query = [])
{
    $url = request()->fullUrlWithQuery($query);
    if( substr($url, -1, 1) == "?" ) {
        $url = rtrim($url, '?');
    }
    return $url;
}

#4 Re: Laravel 5.x » Добавить-исключить get параметры из текущего адреса » 12.09.2018 13:52:58

Собственно ниже приведенный код формирует необходимый результат. Возможно в стандарте есть готовая функция?

$url = request()->fullUrlWithQuery(
   request()->merge(['test' => 2])->query()
);
function full_url (array $query = [])
{
    $query = !empty($query)
        ? request()->merge($query)->query()
        : request()->query();

    return request()->fullUrlWithQuery($query);
}

#5 Laravel 5.x » Добавить-исключить get параметры из текущего адреса » 12.09.2018 13:02:25

Wizardev
Ответов: 2

Все доброго времени суток!

В интернет-магазине есть переключение валют по ссылке. Где бы не находился пользователь он может переключить валюту и само собой остаться на прежнем месте. Так же можно передать ссылку с конкретной валютой и пользователю открывшему ссылку должна установиться соответствующая валюта.

Вот почему то у меня возникли с этим сложности)) Создал middleware, отслеживаю в нем наличие переменной currency_id, если есть устанавливаю ее в сессию. Но затык с формированием ссылок, к примеру

<a href="site.ru/catalog/test?currency_id=1">rub</a> приложение устанавливает валюту и возвращает на на site.ru/catalog/test

<a href="site.ru/catalog/test?filter[1]=1&filter[2]&currency_id=1">rub</a> приложение устанавливает валюту и возвращает на на site.ru/catalog/test?filter[1]=1&filter[2]

или

<a href="site.ru/blog/?currency_id=1">rub</a> => site.ru/blog/

если соорудить нечто эдакое

{{ url(request()->path(), ['test1' => 1, 'test2' => 2]) }}

на выходе получается site.ru/.../1/2 вместо предпалагаемого site.ru/.../?test1=1&test2=2

#6 Re: Хорошие практики (FAQ) » Несколько приложений » 07.09.2018 15:48:34

Собственно да, http://laravel.su/docs/5.4/packages
Это то что надо!)) Но до этого еще надо было дойти в мануале))

#7 Хорошие практики (FAQ) » Middleware » 29.08.2018 14:04:17

Wizardev
Ответов: 0

Можно ли как то в стандарте добавлять посредников только для определенных методов? что то подобное:

$app->middleware(TimerMiddleware::class, ['POST', 'GET']);
$app->middleware(SessionMiddleware::class);

|
|
|

public function middleware($middleware, $methods = [])
    {
        if( !empty($methods) && !in_array($this->request->getMethod(), $methods) ) {
            return false;
        }
        $this->middlewareAdd(
            $this->resolver->resolve($middleware)
        );
    }

смысл в том что мы не создавать объекты если они не нужны для данного метода

#8 Re: Хорошие практики (FAQ) » Несколько приложений » 21.07.2018 22:19:55

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

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

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

Удобный пример необходимого результата это yii2 advanced, но сам фреймворк не всех устраивает.

#9 Re: Хорошие практики (FAQ) » Несколько приложений » 17.07.2018 22:15:39

Дмитрий, да, именно по примеру advanced и хотелось бы сконфигурировать.

к примеру хотелось бы получить примерно такую структуру

############################

common
--config
----session.php
----database.php
...и прочие общие конфиги

############################

backend
--app
----Http
------Controllers
------Providers
--config
----view.php
--storage
-----views
--routes
--Tests
--прочие запчасти

############################

frontend
--app
----Http
------Controllers
------Providers
--config
----view.php
--storage
----views
------themes
--------base
--routes
--Tests
--прочие запчасти

############################

multidomain
--app
----Http
------Controllers
------Providers
--config
----view.php
--storage
----views
------themes
--------base
--routes
--Tests
--прочие запчасти

############################

storage
--files
----common
-------images
----stores
-------[1]
----------offers

############################

при этом, приложения должны обмениваться запчастями такими как маршрутизация, и при этом маршруты не должны лежать в общем конфиге (НИ В КОЕМ СЛУЧАЕ!!!))) Есть еще много других нюансов... Например есть нюанс с правами доступа для каждого приложения. но подобного плана структуру сконфигурировать у меня не удалась. теоретически все понятно. на практике... Структура каждого приложения должна быть индивидуальная, приложения могут добавляться, удаляться и поддерживаться разными разработчиками и ни в коем случае косвенно не должны влиять друг на друга. Общее только то что есть в коммон, статические файлы такие как картинки, кеш (redis), база...

#10 Re: Laravel 5.x » Compiler cachePath » 17.07.2018 13:31:40

Собственно на данный момент решил вопрос таким образом

class ViewServiceProvider extends \Illuminate\View\ViewServiceProvider
{
    public function registerBladeEngine($resolver)
    {
        $this->app->singleton('blade.compiler', function () {
            return new Compiller(
                $this->app['files'], $this->app['config']['view.compiled']
            );
        });
        $resolver->register('blade', function () {
            return new CompilerEngine($this->app['blade.compiler']);
        });
    }
}


class Compiller extends BladeCompiler
{
    public function setCachePath($path)
    {
        $this->cachePath = $path;
    }
}


class Controller extends \App\Http\Controllers\Controller
{
    public function __construct(BladeCompiler $compiler)
    {
        $path = 'frontend';
        View::addLocation(resource_path('views/') . $path);
        $compiler->setCachePath(config('view.compiled') .'/'. $path);
    }
}

#11 Re: Laravel 5.x » Compiler cachePath » 17.07.2018 12:45:03

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

Какой то кошмар...

#12 Laravel 5.x » Compiler cachePath » 17.07.2018 12:23:43

Wizardev
Ответов: 2

Подскажите как указывать путь к директории папки compiled. Хочу организовать темизацию макетов и разделить директории кеша

--storage
----framework
------views
--------admin
--------thems
-----------basetheme

#13 Хорошие практики (FAQ) » Темизация шаблонов » 17.07.2018 11:13:34

Wizardev
Ответов: 0

Нашел несколько примеров реализации.

На мой взгляд самы простой из них

    public function __construct()
    {
        View::addLocation(resource_path('views/frontend'));
    }

Подскажите "правильную" практику темизации шаблонов. как указать директорию compiled для макета еще не нашел)

#14 Re: Хорошие практики (FAQ) » Несколько приложений » 17.07.2018 11:02:51

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

Разложить приложения по подпапкам и пользоваться общими запчастями такими как настройками базы, сессиями и прочим, в этом случае не так просто. Создать какие либо общие запчасти достаточно сложно. А хранить все приложения в одной директории дико не удобно потому как все разрастается мгновенно.

вариант с хранением маршрутов для всех приложений по понятным причинам просто не целесообразно! и к примеру у меня есть домен stores.site.ru на который ссылается домены store1.site.ru store2.site.ru и так далее... в этом случае вообще без вариантов писать маршруты для каждого домена.

с огромным энтузиазмом взялся за ларавель но на данный момент одно разочарование. возможно это с непривычки и не опытности...

#15 Re: Хорошие практики (FAQ) » Несколько приложений » 14.07.2018 01:49:19

Провел день в поисках решения, танцевал с бубном... есть определенные решения но это все не то...

#16 Хорошие практики (FAQ) » Несколько приложений » 13.07.2018 15:32:51

Wizardev
Ответов: 9

Все привет! Только начал смотреть в сторону laravel потому не пинайте больно если ответ на мой вопрос уже есть на данном форуме smile

Есть проект со структурой доменов:

main.ru - основной сайт
admin.main.ru - админка
stores.main.ru - поддомены для магазинов
service.main.ru - служебный домен
... и куча других

как разложить laravel по типу yii2 advanced, где каждое приложение, находится в своей директории со всеми необходимыми запчастями, а общие элементы вынесены в common?

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