我刚刚开始阅读eventsLaravel 的内容,现在已经被困了几个小时了。这可能很容易,但我错过了一些东西。
我像这样触发事件
// get the referrer
$referrer = Customer::where('promocode', $user->referral_code)->first();
// fire referral sign up event
Event::fire(new ReferralSignupEvent($referrer));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在将一个eloquent对象传递给该事件。
我创建事件;
<?php
namespace App\Events;
use App\Models\Customer;
class ReferralSignupEvent extends Event
{
public $referrer;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Customer $referrer)
{
//
$this->referrer = $referrer;
}
}
Run Code Online (Sandbox Code Playgroud)
我创建监听器
<?php
namespace App\Listeners;
use App\Events\ReferralSignupEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class EmailReferralSignupConfirmation
{
/**
* Create the event listener.
* …Run Code Online (Sandbox Code Playgroud) 我们使用 Lumen 5.2.x (Laravel) 应用程序从 Oracle 数据库获取数据。出于这个原因,我们使用oci_connect()连接到数据库。(额外信息:我们使用 Oracle instantclient)
由于未知原因,应用程序没有响应并且不会返回任何数据。经过几个小时的调试,我们发现它陷入了同样的方法:oci_connect(). 显然该函数没有返回“超时”消息或类似的消息。
后来好像数据库移到了另一台主机上,这就是无法连接的原因。然而,我们预计会出现错误,而不是等待大量的时间。
这就是我们试图强制设置暂停的原因,但到目前为止还没有成功。
我们尝试过的事情:
将其添加到连接字符串:(CONNECT_TIMEOUT=10)(RETRY_COUNT=3)完全被忽略。
设置max_execution_time和set_time_limit1
添加一个sqlnet.orawith 设置:
TCP.CONNECT_TIMEOUT=10
SQLNET.INBOUND_CONNECT_TIMEOUT=10
SQLNET.OUTBOUND_CONNECT_TIMEOUT=10
Run Code Online (Sandbox Code Playgroud)
我们尝试的一切都失败了,有人知道如何解决这个错误吗?任何帮助表示赞赏!
编辑:系统信息:Windows Server 2012 R2、IIS 8、PHP 5.6
如何在 Lumen(不是 Laravel)屏幕上隐藏我的密码和其他敏感环境变量?
有时我们要么忘记,要么在开发中测试某些东西,并在 .env 文件中设置 debug=false。即使在开发阶段,我们可能也不希望其他人看到这些信息。
另外,对于一些不知道这一点的人来说,如果在打开页面或发出请求时引发异常,.env 文件中的所有内容都会显示在浏览器中,包括数据库密码等 - “这就是您的方式调试”!
我已经找到了 Laravel 的解决方案,但 Lumen 也需要它!
Laravel 的解决方案:如何在 Laravel whoops 输出中隐藏 .env 密码?
如果我们将此作为 Laravel 团队的默认设置提供,那就最好了,但经过 Laracast 的一些讨论后,我不太乐观!
我希望开发人员知道这个问题并非常非常小心,因为忘记它或什至在开发中测试它都有被黑客攻击的巨大风险!
谢谢你!
我知道有很多关于同样问题的问题,但没有一个解决方案对我有用。
我有一个使用 Lumen 内置 API 的 ReactJS 应用程序。该 API 也被React Native和JQuery AJAX 使用,并且在两者上都可以正常工作。
当我尝试从 ReactJS 发送带有 axios的POST请求时,我在OPTIONS请求中收到 405 Method Not Allowed 错误。
axios 请求是:
const body = { username, password };
axios.post(`{$uri}/payment/api/login`, {body})
.then(res => console.log(res))
.catch(err => console.log('Login: ', err));
Run Code Online (Sandbox Code Playgroud)
起初我认为这是一个 CORS 问题,这会很奇怪,因为我的 API 被托管在 AWS S3 上的静态站点使用,没有任何问题。所以我的 CORS 中间件工作正常。
比我尝试使用 fetchAPI 来调用 API 并且工作正常。我尝试从 axios向虚拟 API https://jsonplaceholder.typicode.com/users发送POST请求,并且工作正常。
编辑
好的,所以我刚刚发现 fetchAPI 以application/x-www-form-urlencoded格式发送数据,该格式不受飞行前请求的影响。这应该意味着 CORS 中间件存在问题。
CORSM中间件
<?php …Run Code Online (Sandbox Code Playgroud) 我首先要说我是 Docker 的新手。我正在尝试使用现有的 Lumen 微服务对 Docker 进行概念验证,但似乎无法让本地的 mysql 容器正常工作。
当我运行 php artisan migrate 时,出现此错误:
SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知
这是我的 docker-compose.yml 文件
version: '3.7'
services:
# Nginx
web:
image: nginx:latest
ports:
- '8080:80'
volumes:
- .:/app
- .docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
links:
- php
# Database
db:
container_name: db
image: mysql:5.7.24
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: local_mysql_password
MYSQL_DATABASE: partners
# PHP
php:
build: .
volumes:
- .:/app
links:
- db
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile 用于 php 图像
FROM php:7.2-fpm …Run Code Online (Sandbox Code Playgroud) 我一直在网上查找,但找不到任何方法。让我解释一下,我有一个 API(Laravel Passport on lumen),我用 Postman 测试了它,我用 oauth 获取了我的访问令牌,一切都很好。现在我有另一个 Laravel 应用程序,我想知道如何使用 API 登录来保留所有身份验证内容。我见过很多实际检索 api_token 的应用程序,它们使用“Auth::user()->where('api_token', $token)”。但我发现这是错误的,因为我不希望我的客户端访问数据库,我希望对数据库的每个请求都由 API 处理。那可能吗?
在 Laravel 中,可以指定在主作业成功执行后应按顺序运行的排队作业列表。如果序列中的一项作业失败,则其余作业将不会运行。Laravel 文档显示,这是通过在可分派作业上使用 withChain 方法来完成的,如下例所示:
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
Run Code Online (Sandbox Code Playgroud)
这在 Laravel 中对我来说效果很好,但是我使用的是 Lumen(Laravel 的轻量级子集)。
根据Lumen 关于队列的文档,“与框架的许多其他部分一样,Lumen 的排队作业的功能与 Laravel 的排队作业相同。因此,要了解有关 Lumen 中排队作业的更多信息,请查看完整的 Laravel 队列文档。”
Lumen 文档确实提到了与 Laravel 的一些细微差别,包括将作业分派到队列的方式的差异。它解释了 Lumen 中的作业可以使用调度函数或队列外观来调度:
dispatch(new ExampleJob);
Queue::push(new ExampleJob);
Run Code Online (Sandbox Code Playgroud)
以此为背景,Lumen有没有办法调度连锁作业呢?我已经在谷歌上搜索了几天,与我的问题最接近的匹配是这两个链接:
$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );对我来说也不起作用。上面的 Stack Overflow 链接解释了 Laravel 语法不起作用的原因是 Lumen 缺少这个Illuminate\Foundation\Bus\Dispatchable特性。
更复杂的事情是,我需要向每个作业传递一组不同的参数 -即使在完整的 Laravel 框架中,这显然也具有挑战性。
以下是我目前在 Lumen 应用程序中提交作业的方式(无链接):
Queue::push(new CreateUser($username,$password));
Queue::push(new SetForwarding($username,$forwardTo));
Queue::push(new EnableIncomingEmail($username));
Queue::push(new …Run Code Online (Sandbox Code Playgroud)
我正在创建一个基于微服务架构的应用程序。
该应用程序用于自由职业相关活动,因此我创建了一个:
到目前为止,我的架构基本上是这样的:
到目前为止我们还没有实现 API 网关。对于身份验证微服务中的身份验证,我们使用 Passport,它在后台使用 Oauth2 和 JWT。
我的情况的问题是,由于我从前端(REACT)直接向微服务发出请求,因此路由不受保护,例如在演出微服务中,每个人都可以发出请求。
所以我的问题是如何保护这些路由,我正在考虑制作一个中间件,每当我们有一个发送到该微服务的请求时,检查用户是否经过身份验证(解码令牌并验证用户是否经过身份验证) 。
当我将所有代码基本上放在 Laravel 的同一环境中时,通过 Laravel 提供的中间件很容易,但是由于仅用于身份验证的微服务和需要从中提供服务的其他微服务没有直接绑定,这给我带来了问题。
因此,如果你们有任何示例、建议或任何相关内容,我们将不胜感激。
如何在 POST 方法中获取没有查询字符串参数的正文请求参数。
当我使用它时,$request->all()它总是返回所有参数,包括查询字符串。
我有自己的原因,这就是为什么我没有使用$request->only([])or $request->except([])。(因为我想创建一个全局函数)
我只想获取正文请求参数...该怎么做?
我正在创建一个带有 lumen truing 的 API 以使用 JWT 身份验证,我执行了 JWT 文档中的所有步骤,如下所示,但当我测试它时,出现错误:
用户模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Model implements JWTSubject
{
protected $fillable = [
'username',
'password',
'email',
'fullname',
'natId',
'role',
];
public function Predector()
{
return $this->hasMany('App\Models\Predect');
}
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom …Run Code Online (Sandbox Code Playgroud)