<?php
namespace lib;
class Router {
// Может rules все таки?))
private $rulls; // Зачем тут отступ?
// phpDocumentor - ваш друг, прописывайте ОБЯЗАТЕЛЬНО типы данных.
private $uri;
private $controller;
private $params = [];
function __construct(){
$this->setUri(); // У вас нет такого метода, есть setURI
$this->setController();
$this->setParams();
$this->setRulls();
}
// Что будет, если $_SERVER['REQUEST_URI'] = '/?', или '/////'?
private function setURI(){
// Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
if($_SERVER['REQUEST_URI'] != '/'):
$this->uri = explode('/',trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'));
endif;
}
// Я правильно понимаю, вы хотите сказать, что контроллер - это некий элемент массива (похоже string|null)? Обычно контроллер - это объект...
private function setController(){
$this->controller = array_shift($this->uri);
}
// В этом методе вы по тупому копируете элементы, зачем?
private function setParams(){
// Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
foreach ($this->uri as $value):
$this->params[] = $value;
endforeach;
}
private function setRulls(){
// NO! загрузка данных - это НЕ задача роутера, от слова СОВСЕМ
file_exists(SITE_ROOT.DS.'routing'.DS.'rulls.php') ? $this->rulls = include(SITE_ROOT.DS.'routing'.DS.'rulls.php') : die('Файл с конфигурацией роутинга где-то затерялся, извини.');
}
// В методе ничего нечего спасать, просто удалите его.
public function run(){
// НЕ ИСПОЛЬЗУЙТЕ ГЛОБАЛЬНЫЕ ПЕРМЕННЫЕ
$_REQUEST = array_merge($_REQUEST, $this->params);
$controller = '\\controllers\\'.$this->rulls[$this->controller]['controller'];
$action = $this->rulls[$this->controller]['action'];
$controller = new $controller; // Что будет, если такого класса нет?
$controller->$action(); // Что будет, если такого метода нет?
}
}
<link href="..." rel="alternate" title="..." type="application/atom+xml">
<link href="..." rel="import" type="text/html">
<script type="application/json">...</script>
<script type="application/ld+json">...</script>
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://yo.ur/pretty-and-cool/url')
element = driver.find_element_by_css_selector('button.with-class#or-id')
element.click()
SELECT something from table1
WHERE (@param1 IS NULL OR @param1 = col1) OR(@param2 IS NULL OR @param2 = col2)
{ ...state, loading: true}
означает: Возьми пустой объект, скопируй туда все содержимое state, а потом переопредели следующие ключи (loading и т.д.)export default function company(state = defaultState, action) {
switch (action.type) {
case LOAD_REQUESTED:
return {
...state,
loading: true
};
case LOAD_OK:
return {
...state,
loading: false,
counter: action.counter,
app: action.app,
errors: null
};
default:
return state;
}
}