db.documents.createIndex( { is_processed: 1 } , { sparse: true } )
db.documents.find({is_processed: 1}).hint({is_processed: 1}).limit(200)
db.documents.find().sort({is_processed: 1}).hint({is_processed: 1}).limit(200)
class RobotsControlller
{
public function inactiveRobots()
{
$robots = Robots::find()->where(['active' => false])->all();
foreach ($robots as $robot) {
$robot->active = true;
$robot->save();
}
return $this->render('robots', [
'robots' => $robots
]);
}
}
class RobotsControlller
{
public function inactiveRobots()
{
$container = $this->getContainer();
$robotsService = $container->getRobotsService();
$robots = $robotsService->getInactiveRobots();
$stationService = $container->getStationService();
$stationService->acivateRobots($robots);
return $this->render('robots', [
'robots' => $robots
]);
}
}
GET, POST, PUT и другие
] и компоненты URI.например: https://ru.wikipedia.org/wiki/URI?foo=bar#title
[схема: https] :// [источник: ru.wikipedia.org] [путь: /wiki/URI] [запрос: ?foo=bar] [фрагмент: #title]
// файл index.php
// Маршруты
// [маршрут => функция которая будет вызвана]
$routes = [
// срабатывает при вызове корня или /index.php
'/' => 'hello',
// срабатывает при вызове /about или /index.php/about
'/about' => 'about',
// динамические страницы
'/page' => 'page'
];
// возвращает путь запроса
// вырезает index.php из пути
function getRequestPath() {
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
return '/' . ltrim(str_replace('index.php', '', $path), '/');
}
// наш роутер, в который передаются маршруты и запрашиваемый путь
// возвращает функцию если маршшрут совпал с путем
// иначе возвращает функцию notFound
function getMethod(array $routes, $path) {
// перебор всех маршрутов
foreach ($routes as $route => $method) {
// если маршрут сопадает с путем, возвращаем функцию
if ($path === $route) {
return $method;
}
}
return 'notFound';
}
// функция для корня
function hello() {
return 'Hello, world!';
}
// функция для страницы "/about"
function about() {
return 'About us.';
}
// чуть более сложный пример
// функция отобразит страницу только если
// в запросе приходит id и этот id равен
// 33 или 54
// [/page?id=33]
function page() {
$pages = [
33 => 'Сага о хомячках',
54 => 'Мыши в тумане'
];
if (isset($_GET['id']) && isset($pages[$_GET['id']])) {
return $pages[$_GET['id']];
}
return notFound();
}
// метод, который отдает заголовок и содержание для маршрутов,
// которые не существуют
function notFound() {
header("HTTP/1.0 404 Not Found");
return 'Нет такой страницы';
}
// Роутер
// получаем путь запроса
$path = getRequestPath();
// получаем функцию обработчик
$method = getMethod($routes, $path);
// отдаем данные клиенту
echo $method();
index.php
about.php
contact.php
...
PUT /компании/компания/{_id}
{
"навание": "SpaceX",
"работники": ...,
}
PUT /компании/компания/{hash}
{
...
}
"mappings": {
"компания": {
// в текущей версии: 2.3 depricated - сказывалось на производительности
"_id": {"path": "hash"},
"properties": {
"навание": {
"type": "string"
},
...
}
}
}
"mappings": {
"компания": {
"properties": {
"работники": {
"type": "nested",
"properties": {
"должность": {
"type": "string"
},
"имя": {
"type": "string"
}
}
}
}
}
}
// создание/обновление
PUT /компании/компания/{_id}
{
"название": "...",
"hash": "...",
"работники": [
{
"должность": "манагер",
"имя": ["Анатолий", "Андрей"]
},
{
"должность": ["управляющий", "заместитель"]
"имя": "Дмитрий"
},
{
"должность": "кассир",
"имя": ["Татьяна", "Анастасия"]
},
]
}
// примерный поиск
GET /компании/компания/_search
{
"query": {
"nested": {
"path": "работники",
"query": {
"bool": {
"must": [
{ "match": { "работники.должность": "управляющий" }},
{ "match": { "работники.должность": "кассир" }}
]
}
}
}
}
}
private function endElements($parser, $name){
$this -> deep --;
if(!empty($name)) {
$this -> element = null;
}
// $this->wrapper == 'class'
if ($name === $this->wrapper && !empty($this->output)) {
// отдать данные в коллбэк
call_my_callback($this->output);
// очистить буфер
$this->output = [];
}
}
private function characterData($parser, $data){
if(!empty($data)) {
if (in_array($this->element, $this->necessary_elements)) {
if (!isset($this->output[$this->element])) {
$this->output[$this->element] = '';
}
$this->output[$this->element] .= trim($data);
}
}
}
// аргументы конструктора MyController
$constructorArgs = [
'id',
Yii::$app,
];
// заменяемые методы и свойства MyController
$methods = [
// метод, который тестируем
// подойдет любой тип callable
'methodToTest' => function() {
$args = func_get_args();
... тестируем аргументы
},
];
$controllerMock = \Codeception\Util\Stub::construct(
'\namespace\controllers\MyController',
$constructorArgs,
$methods
);
$controllerMock->run('action', []);
textarea id="g-recaptcha-response"
-> submit, profit.input
можно менятьvar input = {
// имя
name: 'Иванов',
// email
email: 'ivanov.no.captcha@mail.ru',
//
'g-recaptcha-response': 'whatever'
};
var formId = 'reg_form';
var query = '[name=email],[name=name],[id=g-recaptcha-response]';
var form = document.getElementById(formId);
var fields = form.querySelectorAll(query);
for (var i = 0; i < fields.length; ++i) {
var field = fields[i];
var name = field.getAttribute('name');
var value = input[name];
$(field).val(value);
}
$(form).submit();
[
'ИмяКласса' => [
'id' => '2'
'type' => '2'
'date' => '12/01/2011'
]
]
$data = [
'id' => '2'
'type' => '2'
'date' => '12/01/2011'
];
// второй параметр - пустая строка
$model->load($data, '');
$data = [
'мой ключ' => [
'id' => '2'
'type' => '2'
'date' => '12/01/2011'
]
];
$model->load($data, 'мой ключ');