Если вы используете TypScript, я бы хотел добавить, что вы можете использовать функцию «предикат типа». Просто следует обернуть логическую проверку в функции, которая возвращает x is Promise
, и вам не нужно будет делать машинные приемы. Ниже моего примера, c
является обещанием или одним из моих типов, которые я хочу преобразовать в обещание, вызвав метод c.fetch()
.
export function toPromise(c: Container | Promise): Promise {
if (c == null) return Promise.resolve();
return isContainer(c) ? c.fetch() : c;
}
export function isContainer(val: Container | Promise): val is Container {
return val && (>val).fetch !== undefined;
}
export function isPromise(val: Container | Promise): val is Promise {
return val && (>val).then !== undefined;
}
Дополнительная информация: https : //www.typescriptlang.org/docs/handbook/advanced-types.html
Разница между Люменом и Ларавелом в том, что в Ларавеле вы звоните Application->setLocale()
.
Это делает три вещи, как описано выше:
app.locale
В Lumen вы могли бы вызвать переводчик напрямую с помощью app('translator')->setLocale()
или App::make('translator')->setLocale()
,
, так что разница здесь в том, что конфигурация переменная не будет установлена автоматически, и событие locale.changed не будет запущено.
Класс Application Laravel также обновляет конфигурацию и запускает событие:
public function setLocale($locale)
{
$this['config']->set('app.locale', $locale);
$this['translator']->setLocale($locale);
$this['events']->fire('locale.changed', [$locale]);
}
, а в Laravel getLocale просто читает переменную конфигурации:
public function getLocale()
{
return $this['config']->get('app.locale');
}
Для переводов, это переводчик, который имеет значение. Trans helper от Laravel выглядит следующим образом:
function trans($id = null, $parameters = [], $domain = 'messages', $locale = null)
{
if (is_null($id)) {
return app('translator');
}
return app('translator')->trans($id, $parameters, $domain, $locale);
}
Вам нужно сделать так, чтобы ваше приложение расширяло другой класс с помощью 3 вышеуказанных методов
Вы можете расширить свой Laravel\Lumen\Application
в новом классе и заставить переменную $app
взять экземпляр из вашего нового класса в вашем файле bootstrap\app.php
1 - создать новый класс следующим образом: [116 ]
<?php namespace App\Core;
use Laravel\Lumen\Application as Core;
class Application extends Core
{
/**
* @param $locale
*/
public function setLocale($locale): void
{
$this['config']->set('app.locale', $locale);
$this['translator']->setLocale($locale);
$this['events']->fire('locale.changed', [ $locale ]);
}
public function getLocale()
{
return $this['config']->get('app.locale');
}
}
2 - создайте экземпляр из вашего нового класса, например:
$app = new App\Core\Application(
realpath(dirname(__DIR__) . '/')
);