小编ale*_*exw的帖子

使用eloquent orm和mysql的连接太多了

我正在使用SLIM FrameworkLaravel Eloquent ORM用于REST API.最近我遇到了一个问题too many connections.

在一个请求URI期间,我需要进行多次调用GetSet调用mySql DB.这将打开我所做的每个数据库事务的连接.我想避免这种情况.现在,mysql连接池有200个线程.

我的API预计将有超过1000个并发调用,并且在当前环境中,40%的调用将失败(使用jMeter测试).

我的想法是,对于一个API调用,我的应用程序应该只使用一个连接线程,并将MySql连接池增加到大约1000到1500之间.这是一个糟糕的方法吗?

使用Eloquent ORM,我的数据库连接由Capsule管理. 我应该使用Singleton方法和API请求中的任何后续调用进行第一次连接,应该使用相同的线程吗?

这是我的数据库连接管理器:

    use Illuminate\Database\Capsule\Manager as Capsule;
    /**
     * Configure the database and boot Eloquent
     */
    $capsule = new Capsule;

    $capsule->addConnection($databaseConfig['mysql']);

    // Set the event dispatcher used by Eloquent models... (optional)
    use Illuminate\Events\Dispatcher;
    use Illuminate\Container\Container;

    $dispatcher = new Dispatcher(new Container);
    $capsule->setEventDispatcher($dispatcher);

    $capsule->setAsGlobal();
    $capsule->bootEloquent();
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方法是什么?

UPDATE

我正在尝试另一种方法来建立持久连接.但是,在完成对作业的调用之后,持久连接仍未关闭.即使打电话DB::Disconnect也无济于事.

    <?php

    use Illuminate\Database\Capsule\Manager as Capsule;
    use Illuminate\Events\Dispatcher;
    use …
Run Code Online (Sandbox Code Playgroud)

php mysql orm slim eloquent

7
推荐指数
1
解决办法
2308
查看次数

如何在类定义之外为魔术属性创建PHPDoc?

PHPDoc提供了@var标记,它甚至可以用于在类之外声明的变量.

但是,如果我将变量定义为对象的魔术成员,这似乎不起作用:

/** @var $app->translator \Fortress\MessageTranslator */
$app->translator = new \Fortress\MessageTranslator();
Run Code Online (Sandbox Code Playgroud)

哪里$app修身,支持通过神奇的getter和setter方法任意财产分配对象.

我知道我可以Slim通过@property标签将它添加到自身,但是Slim每次创建新属性时我都需要更改核心代码.

PHPDoc是否支持这种动态属性记录?

php phpdoc slim

7
推荐指数
1
解决办法
798
查看次数

使用Twig生成纯JSON响应是否合适?

我正在尝试获取Eloquent查询的结果,并将其结果输出为JSON响应.我的应用程序使用Slim和Twig生成HTML响应,但我不确定是否应该使用Twig来生成JSON.

我知道我可以使用PHP的本机echo json_encode(...)功能,但如果我的数据库包含HTML实体,这会产生潜在的XSS漏洞.Twig应该负责适当地逃避我的输出.

我知道这个问题,但它似乎没有提供相关的答案.我也知道json_encode过滤器,但是当我这样做时:

/api/users-json.twig

{
    "rows"  : {{rows | json_encode}}
}
Run Code Online (Sandbox Code Playgroud)

/ api/users控制器:

// Simulate database query results
$result = [
    "rows" => [
        [
            "user_name" => "alex",
            "message" => "grawr!"    
        ],
        [
            "user_name" => "h4xx0r",
            "message" => "<script>alert('hello, I can execute JS on your website!');</script>"    
        ]                
    ]
];

$app->response->headers->set('Content-Type', 'application/json; charset=utf-8');
$app->render("api/users-json.twig", $result);
Run Code Online (Sandbox Code Playgroud)

响应如下:

{
    "rows"  : [{&quot;user_name&quot;:&quot;alex&quot;,&quot;message&quot;:&quot;grawr!&quot;},{&quot;user_name&quot;:&quot;h4xx0r&quot;,&quot;message&quot;:&quot;&lt;script&gt;alert(&#039;hello, I can execute JS on your website!&#039;);&lt;\/script&gt;&quot;}]
}
Run Code Online (Sandbox Code Playgroud)

如果没有进一步处理,这是不可解释的客户端.根据我的浏览器,内容类型被正确设置为application/json.

当然,我可以这样做: /api/users-json.twig …

php xss json slim twig

7
推荐指数
1
解决办法
645
查看次数

使用twig和Slim框架(版本2)上传文件 - PHP

我正在使用UserFrosting一个用户管理系统,我在通过表单发布文件时遇到一些麻烦,这就是我试过的

这就是我的twig文件的样子.

<form name="eveniment" method="post" action="{{form_action}}" enctype="multipart/form-data">
  ...
  <input type="file" class="form-control" name="poza" id="poza">
  ...
</form>`
Run Code Online (Sandbox Code Playgroud)

这就是我的控制器的样子

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["poza"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

// Check if image file is a actual image or fake image
$check = getimagesize($_FILES);
if($check !== false) {
    $ms->addMessage("success", "File is an image - " . $check["mime"] . ".");
    $uploadOk = 1;
} else {
    $ms->addMessage("danger", "File is not an image.");
    $uploadOk = 0;
}
$ms->addMessage("success", $target_file);
// Check …
Run Code Online (Sandbox Code Playgroud)

php file-upload slim twig userfrosting

7
推荐指数
1
解决办法
1362
查看次数

Slim Framework重定向与params

我是第一次使用Slim框架,到目前为止一切都是现货.但有一件事我似乎无法理解.发布表单后,我想重定向回同一页面,但它在网址中使用了一个参数,我无法回复它.这是我到目前为止:

$app->post('/markets-:game', $authenticated(), function($game) use ($app) {

    $request = $app->request();

    $id = $request->post('game3');

    $app->flash('global', 'game added');
    $app->response->redirect($app->urlFor('games.markets', {"game:$id"}));

})->name('games.markets.post');
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.谢谢

php redirect slim

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

超薄3 - 如何添加404模板?

在Slim 2中,我可以轻松地覆盖默认的404页面,

// @ref: http://help.slimframework.com/discussions/problems/4400-templatespath-doesnt-change
$app->notFound(function () use ($app) {
    $view = $app->view();
    $view->setTemplatesDirectory('./public/template/');
    $app->render('404.html');
});
Run Code Online (Sandbox Code Playgroud)

但在Slim 3中,

// ref: http://www.slimframework.com/docs/handlers/not-found.html
//Override the default Not Found Handler
$container['notFoundHandler'] = function ($c) {
    return function ($request, $response) use ($c) {
        return $c['response']
            ->withStatus(404)
            ->withHeader('Content-Type', 'text/html')
            ->write('Page not found');
    };
};
Run Code Online (Sandbox Code Playgroud)

如何添加我的404模板('404.html')?

slim psr-7 slim-3

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

Eloquent的Model :: save()方法有哪些可用选项?

Eloquent有一个名为的方法save(),它接受一个可选的参数数组(选项).但是,API参考似乎没有解释这些选项是什么.

某个地方是否有我遗失的清单?我可以追踪他们失望过当然(我看到的源代码touchtimestamp,至少),但我至少是想通这个问题会像给别人参考价值.

php eloquent laravel-5

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

Laravel 5 雄辩的 hasManyThrough/belongsToManyThrough 关系

在 Laravel 5.2 应用程序中,我有三个模型:User,RoleTask. AUser与 multiple 相关联Roles,aRole与 multiple 相关联Tasks。因此,每个用户通过他们的角色与多个任务相关联。

我正在尝试通过他们的角色访问Tasks与 a 相关的所有内容User

我的模型的相关部分如下所示:

class User extends Authenticatable
{    
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }

    public function tasks()
    {
        return $this->hasManyThrough('App\Task', 'App\Role');
    }
}

class Role extends Model
{
    public function tasks()
    {
        return $this->belongsToMany('App\Task');
    }

    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

class Task extends Model
{    
    public function roles() …
Run Code Online (Sandbox Code Playgroud)

php many-to-many laravel eloquent laravel-5

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

PHP Slim 3中间件的不合理错误

我试图使用ValidationErrorsMiddleware.php类作为中间件,所以我将以下代码添加到我的bootstrap/app.php:

$app->add(new App\Middleware\ValidationErrorsMiddleware($container));
Run Code Online (Sandbox Code Playgroud)

将上面的代码添加到我的app.php后,我收到以下错误:

Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in C:\wamp64\www\authentication\vendor\slim\slim\Slim\App.php on line 552
RuntimeException: Unexpected data in output buffer. Maybe you have characters before an opening <?php tag? in C:\wamp64\www\authentication\vendor\slim\slim\Slim\App.php on line 552
Run Code Online (Sandbox Code Playgroud)

为了以防万一,任何人都需要查看我的类和app.php的代码,我已将它们包括在这里


ValidationErrorsMiddleware.php

<?php

namespace App\Middleware;

class ValidationErrorsMiddleware extends Middleware {

  public function __invoke($request, $response, $next) {

    var_dump('middleware');
    $response = $next($request, $response);

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

Middleware.php

<?php

namespace App\Middleware;

class …
Run Code Online (Sandbox Code Playgroud)

php slim respect-validation slim-3

5
推荐指数
2
解决办法
8784
查看次数

超薄框架和雄辩的ORM

我使用的Slim Framework一起Laravel's Eloquent ORM,这是我的代码:

user.php的

class User extends \Illuminate\Database\Eloquent\Model
{
    protected $table = 'accounts';
}
Run Code Online (Sandbox Code Playgroud)

的index.php

require_once 'vendor/autoload.php';

// Models
include 'app/models/User.php';

$app = new \Slim\Slim();

// Database information
$settings = array(
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'database' => 'photo_mgmt',
    'username' => 'root',
    'password' => '',
    'collation' => 'utf8_general_ci',
    'prefix' => '',
    'charset'   => 'utf8',
);

$container = new Illuminate\Container\Container;
$connFactory = new \Illuminate\Database\Connectors\ConnectionFactory($container);
$conn = $connFactory->make($settings);
$resolver = new \Illuminate\Database\ConnectionResolver();
$resolver->addConnection('default', $conn);
$resolver->setDefaultConnection('default');
\Illuminate\Database\Eloquent\Model::setConnectionResolver($resolver); …
Run Code Online (Sandbox Code Playgroud)

php slim laravel composer-php eloquent

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