Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Ищу подработку
wizarddev@yandex.ru
Подскажите пакеты для свойств товара
сорямба, разобрался
единственное хотелось бы чистит ? если query пуст
function full_url (array $query = [])
{
$url = request()->fullUrlWithQuery($query);
if( substr($url, -1, 1) == "?" ) {
$url = rtrim($url, '?');
}
return $url;
}
Собственно ниже приведенный код формирует необходимый результат. Возможно в стандарте есть готовая функция?
$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);
}
Все доброго времени суток!
В интернет-магазине есть переключение валют по ссылке. Где бы не находился пользователь он может переключить валюту и само собой остаться на прежнем месте. Так же можно передать ссылку с конкретной валютой и пользователю открывшему ссылку должна установиться соответствующая валюта.
Вот почему то у меня возникли с этим сложности)) Создал 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]¤cy_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
Собственно да, http://laravel.su/docs/5.4/packages
Это то что надо!)) Но до этого еще надо было дойти в мануале))
Можно ли как то в стандарте добавлять посредников только для определенных методов? что то подобное:
$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)
);
}
смысл в том что мы не создавать объекты если они не нужны для данного метода
суть в том что это прайс агрегатор - основной домены, домен для администратора, мультидоменный для магазинов, домены для групп магазинов, и прочие. если копировать приложения то для каждого домена необходимо переписавать или копировать кучу кода, в одном месте изменил логику и надо идти по всем доменам вносить правки...
по сути все это одно приложение, но для удобства все необходимые запчасти конкретного приложению вынесены в отдельную директорию.
сконфигурировать приложение таким образом оказалось геморройным занятием. собственно у меня и не вышло довести до того состояние что бы это не смотрелось одним сплошным костылем. По сути, как мне на данный момент кажется, ларавель в этом плане совсем не гибкий. В моем случае надо хранить все приложения в одной директории.
Удобный пример необходимого результата это yii2 advanced, но сам фреймворк не всех устраивает.
Дмитрий, да, именно по примеру 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), база...
Собственно на данный момент решил вопрос таким образом
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);
}
}
выходит так что бы очистить кеш админа мне надо грохнуть и кеш публичной части. плюс если у меня множество макетов публичной части то весь кеш, если его на сбросить, будет копится в одной директории и при переключении с одного макета на другой нельзя не затронуть весь кеш!
Какой то кошмар...
Подскажите как указывать путь к директории папки compiled. Хочу организовать темизацию макетов и разделить директории кеша
--storage
----framework
------views
--------admin
--------thems
-----------basetheme
Нашел несколько примеров реализации.
На мой взгляд самы простой из них
public function __construct()
{
View::addLocation(resource_path('views/frontend'));
}
Подскажите "правильную" практику темизации шаблонов. как указать директорию compiled для макета еще не нашел)
немного поковырял и пришел к мнению, на мое великое удивления, что ларавель в этом плане не на столько гибкий и удобный как о нем говорят. для начала все пути приложения предопределены и вшиты в приложение.
Разложить приложения по подпапкам и пользоваться общими запчастями такими как настройками базы, сессиями и прочим, в этом случае не так просто. Создать какие либо общие запчасти достаточно сложно. А хранить все приложения в одной директории дико не удобно потому как все разрастается мгновенно.
вариант с хранением маршрутов для всех приложений по понятным причинам просто не целесообразно! и к примеру у меня есть домен stores.site.ru на который ссылается домены store1.site.ru store2.site.ru и так далее... в этом случае вообще без вариантов писать маршруты для каждого домена.
с огромным энтузиазмом взялся за ларавель но на данный момент одно разочарование. возможно это с непривычки и не опытности...
Провел день в поисках решения, танцевал с бубном... есть определенные решения но это все не то...
Все привет! Только начал смотреть в сторону laravel потому не пинайте больно если ответ на мой вопрос уже есть на данном форуме
Есть проект со структурой доменов:
main.ru - основной сайт
admin.main.ru - админка
stores.main.ru - поддомены для магазинов
service.main.ru - служебный домен
... и куча других
как разложить laravel по типу yii2 advanced, где каждое приложение, находится в своей директории со всеми необходимыми запчастями, а общие элементы вынесены в common?
Страницы 1