小编Gie*_*ius的帖子

如何在PHP(Laravel)中调试超时错误?

我收到客户遇到的许多错误的报告

Symfony的\分量\调试\异常\ FatalErrorException

最大执行时间超过30秒

我,我自己,无法在我的本地机器上或生产服务器上复制它.这个网址遍布整个网站,因此,我猜它是全球性的,就像一个造成这种情况的中间件.

我使用Sentry.io来收集数据,但异常跟踪只有1个条目指向Symfony基本代码中的某个代码,最常见的是:

第73行的vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php

第45行的vendor/symfony/finder/Iterator/DateRangeFilterIterator.php

第69行的vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php

显然,似乎存在与文件系统相关的东西,但由于没有跟踪,我无法看到在站点代码中查找错误的位置.我猜它是某种无限循环或泄漏,但没有任何痕迹可以看,并没有一致的方法来重现问题.

我应该如何寻找问题并进行调试?

我可以设置任何设置,还是可以使用/启用的工具?

php debugging timeout symfony laravel

12
推荐指数
1
解决办法
2454
查看次数

Laravel - Eloquent - 动态定义的关系

是否可以动态设置模型的关系?例如,我有 model Page,我想在banners()不实际更改其文件的情况下为其添加关系?那么是否存在这样的事情:

Page::createRelationship('banners', function(){
    $this->hasMany('banners');
});
Run Code Online (Sandbox Code Playgroud)

或者类似的东西?因为无论如何它们都是使用魔法方法获取的,也许我可以动态添加关系?

谢谢!

php orm laravel eloquent

6
推荐指数
2
解决办法
8997
查看次数

将 Laravel + Vue SPA 应用程序部署到 AWS 的最佳实践/方法

我有 2 个存储库驻留在 Bitbucket - 后端(Laravel 应用程序作为 API 和入口点)和前端(主应用程序前端 - VueJs 应用程序)。我的目标是设置持续部署,因此每当在 master(或我选择的其他分支)分支中的任何一个 repos 中推送某些内容时,它都会触发某些内容,以便整个应用程序构建并到达 AWS EC2 服务器。

我已经考虑/尝试了以下内容:

  • AWS CodePipeline 和/或 CodeDeploy。这看起来是一个不错的选择,因为服务器也在 AWS 中。但是,不支持开箱即用的 Bitbucket,因此必须转到 Bitbucket Pipeline -> AWS Lambda -> AWS S3 -> AWS CodePipeline/CodeDeploy -> AWS EC2。这似乎是一个非常漫长的旅程,我不确定这是否是一个好的做法。
  • 使用 Laravel Forge 部署 Laravel 应用程序,并添加额外的步骤来构建 VueJS 应用程序。这似乎是一个非常基本的解决方案,但是,构建过程似乎在那里失败,因为它只需要很长时间并且崩溃没有错误(而我可以在我的本地机器或其他地方托管的不同服务器上运行完全相同的过程)。我不确定这是否与服务器的配置方式、Forge 运行部署脚本的方式有关,或者服务器太弱而无法处理它。

我的主要问题是部署此类组件的应用程序的最佳做法是什么?我已经阅读了许多关于部署 NodeJS 应用程序或 Laravel 应用程序的教程/文章,但还没有获得有关此类场景的良好信息。

在本地构建前端应用并对构建的 JS 文件进行版本控制会更好吗?或者我应该在 Bitbucket 中创建一个管道来构建应用程序然后部署它?或者最好只进行版本控制和部署源文件,并将整个构建过程作为部署过程的最后一步,由托管应用程序本身的服务器完成?还有一些文章建议在 S3 存储桶中托管整个前端应用程序 - 这也是不好的做法吗?

感谢任何有帮助的帮助和资源!

deployment bitbucket amazon-web-services laravel vue.js

6
推荐指数
1
解决办法
726
查看次数

WAMP Laravel - 将 API 请求从一个本地站点发送到另一个本地站点会混淆环境变量

我正在开发一个 API 服务,我开发的另一个网站将使用该服务。因此,在本地构建和测试时,显然我希望该站点的两个本地副本都能工作。然而,它似乎混淆了environment变量。

例如:

  • Site AAPP_URL=http://a.local
  • Site BAPP_URL=http://b.local
  • 我从代码发送一个GET请求(使用Guzzle)到Site Ahttp://b.local/test
  • 结束/testSite B只是转储出来dump(env('APP_URL'))
  • 检索到的结果Site A"http://a.local"
  • 预期结果:"http://b.local"

因此,中的代码Site B正在使用从 加载的环境变量运行Site A。这是一个问题,因为Site B无法访问正确的数据库,它正在尝试使用 的Site A数据库。

这是我的本地设置(Win10 + WAMP)、PHP 设置、Laravel 设置的问题吗?

php wamp environment-variables laravel

6
推荐指数
1
解决办法
961
查看次数

Vue - 如何在模板内确定变量的范围

我可以以某种方式在组件模板内确定数据范围吗?

例如,如果我有以下代码:

data() {
    a: {test: 'Test A'},
    b: {test: 'Test B'}
}
Run Code Online (Sandbox Code Playgroud)

目前在模板中我必须做

<div class="a">{{ a.test }}</div>
<div class="b">{{ b.test }}</div>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以确定每个元素的数据范围吗?例如,类似:

<div :scope="a">{{ test }}</div><!-- This prints 'Test A' -->
<div :scope="b">{{ test }}</div><!-- This prints 'Test B' -->
Run Code Online (Sandbox Code Playgroud)

我确实知道我可以将每个项目提取到一个组件中,但是,我想知道是否有办法在同一模板中做到这一点?由于它没有自己的逻辑等,所以我不想将其提取到单独的组件中以限定变量的范围。但是,多次重复相同的变量名称可能会很乏味。

例如,我有一个用于创建新项目的表单,其中有许多输入。我将它们保存在一个变量下(例如)newItem,看起来像

newItem: {
    input1: "",
    input2: "",
    input3: null,
    input4: false,
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

在模板中我想做

<div :scope="newItem">
    <input v-model="input1"/>
    <!-- etc.. --->
</div>
Run Code Online (Sandbox Code Playgroud)

代替

<input v-model="newItem.input1"/>
<!--- etc... --->
Run Code Online (Sandbox Code Playgroud)

vue.js

6
推荐指数
1
解决办法
3584
查看次数

PHP Amazon AWS S3 - 使用预签名 URL 上传对象

我正在尝试生成一个 URL,其他系统可以使用该 URL 将文件上传到我的 S3 存储桶。我查看了文档和类似问题,但是,我找不到正确的解决方案。

我已经尝试以多种方式创建 PreSigned URL($this->s3是 S3Client 的参考):

1:

       $signedUrl = $this->s3->getCommand(
            'PutObject',
            array(
                'Bucket' => $this->bucket,
                'Key' => 'recording_test.mp3',
                'Body' => ''
            )
        )->createPresignedUrl('+2 hours');
Run Code Online (Sandbox Code Playgroud)

2:

    $command = $this->s3->getCommand('PutObject', array('Bucket' => $this->bucket, 'Key' => 'recording_test3.mp3', 'Body' => ''));

    $request = $command->prepare();

    $signedUrl = $this->s3->createPresignedUrl($request, '+2 hours');
Run Code Online (Sandbox Code Playgroud)

当试图简单地访问 URL 时,我收到以下错误:

The request signature we calculated does not match the signature you provided. Check your key and signing method.
Run Code Online (Sandbox Code Playgroud)

我也试过这样: $key = 'recording_test2.mp3'; $url = $this->bucket.'/'.$key; …

php amazon-s3 amazon-web-services

5
推荐指数
1
解决办法
2454
查看次数

Laravel 使用点符号获取旧输入

我的输入名称如下: <input name="settings[custom_plan.breakpoint1]"/>

我如何检索old它的输入?由于点符号适用于输入数组,但不适用于实际名称。所以old('settings[custom_plan.breakpoint1]')不起作用,也不起作用old('settings.custom_plan\.breakpoint1')(转义点在验证符号中起作用)。

如何检索输入的旧值?

谢谢!

php laravel

5
推荐指数
1
解决办法
2516
查看次数

Laravel Artisan - 重新加载.env变量或重启框架

我正在尝试编写一个命令作为构建项目的快速入门.该命令要求输入数据库详细信息,然后更改.env文件.问题是该命令之后需要进行一些数据库查询,但不会重新加载.env变量.

我的问题是,有没有办法重新加载或覆盖.env变量运行时.如果没有,有没有办法新鲜地召唤另一个Artisan命令,那么框架再次引导?

在我的命令中,我尝试$this->call('build:project')用我的实际命令,但即使在第二次调用中,变量也不会重新加载.

有没有办法在不让用户手动调用多个命令的情况下实现这一目的?

谢谢!

php laravel artisan

4
推荐指数
2
解决办法
1万
查看次数

Laravel Eloquent - 重写模型的构造函数来更改属性

所以我有一个Page模型,它扩展了Eloquent Model类。我正在尝试重写构造函数,其中我需要一些额外的逻辑。这就是我目前所拥有的:

class Page extends Model
{

    public function __construct(array $attributes = [])
    {

        parent::__construct($attributes);
        $this->main_image = null;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是当我打电话时,这似乎没有将 保存到属性main_image中。$this->attributesPage::find(1);

我相信这是因为Page::find最终会调用Model::newFromBuilder,如下所示:

public function newFromBuilder($attributes = [], $connection = null)
{
    $model = $this->newInstance([], true);

    $model->setRawAttributes((array) $attributes, true);

    $model->setConnection($connection ?: $this->getConnectionName());

    return $model;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它首先创建实例,然后设置属性,这意味着构造函数中设置的任何内容都会被忽略。

是否有任何解决方法可以重写构造函数(或类似方法)来更改每个检索/创建的模型实例的属性?显然我可以重写newFromBuildernewInstance__construct类似的方法,但这看起来非常老套且难以维护。

谢谢!

php laravel eloquent

4
推荐指数
1
解决办法
1万
查看次数

Google Maps API - 给出“概览”折线的方向毫无意义

我正在使用方向 apix使用Google Maps API. 我的电话是这样的:

https://maps.googleapis.com/maps/api/directions/json?key=MY_KEY&origin=Exeter%2C+UK&destination=London&region=uk&waypoints=optimize:true|52.80443%2C1.3974969999999303|51.33700547604255%2C-2.5970759440972415|50.430475%2C-4.305309999999963

它返回的结果似乎没问题(所有驾驶说明)。但是,它还会返回一个概览折线,我想在我的网站上显示该折线。但是每当我对其进行解码时(无论是在我的网站上还是使用他们的Polyline Utility),它都会显示一些奇怪的线条,这些线条似乎不太符合路线(它有正确的起点,但没有显示路线,在有些点它在直线上移动得很远)。例如:

错误的折线

这是我为上述请求获得的路线的折线。正如你所看到的,它有很多线在水面上航行......

在我的网站中,我像这样显示多边形(但在他们的折线工具中,我得到了相同的行):

var decodedPath = google.maps.geometry.encoding.decodePath("<?=$response->routes[0]->overview_polyline->points?>");
var poly = new google.maps.Polyline({
                  path: decodedPath,
                  strokeColor: '#FF0000',
                  strokeOpacity: 1.0,
                  strokeWeight: 3,
                  map: map
           });
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何获得正确的折线以显示实际路线的轮廓?

谢谢!

google-maps google-maps-api-3

0
推荐指数
1
解决办法
2482
查看次数