我正在使用SLIM FrameworkLaravel Eloquent ORM用于REST API.最近我遇到了一个问题too many connections.
在一个请求URI期间,我需要进行多次调用Get并Set调用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) 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是否支持这种动态属性记录?
我正在尝试获取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" : [{"user_name":"alex","message":"grawr!"},{"user_name":"h4xx0r","message":"<script>alert('hello, I can execute JS on your website!');<\/script>"}]
}
Run Code Online (Sandbox Code Playgroud)
如果没有进一步处理,这是不可解释的客户端.根据我的浏览器,内容类型被正确设置为application/json.
当然,我可以这样做: /api/users-json.twig …
我正在使用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) 我是第一次使用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)
任何帮助将非常感激.谢谢
在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')?
Eloquent有一个名为的方法save(),它接受一个可选的参数数组(选项).但是,API参考似乎没有解释这些选项是什么.
某个地方是否有我遗失的清单?我可以追踪他们失望过当然(我看到的源代码touch和timestamp,至少),但我至少是想通这个问题会像给别人参考价值.
在 Laravel 5.2 应用程序中,我有三个模型:User,Role和Task. 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) 我试图使用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) 我使用的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 ×9
slim ×8
eloquent ×4
laravel ×2
laravel-5 ×2
slim-3 ×2
twig ×2
composer-php ×1
file-upload ×1
json ×1
many-to-many ×1
mysql ×1
orm ×1
phpdoc ×1
psr-7 ×1
redirect ×1
userfrosting ×1
xss ×1