zf3: получение значений из GET и POST
В контроллере:
1 2 |
$rows=$this->params()->fromQuery('rows', '10'); $url=$this->params()->fromPost('url', ''); |
Жизнь замечательных грибов
Здесь собраны статьи, наработки, исправление ошибок и решение проблем связанных с разработкой на языке PHP
В контроллере:
1 2 |
$rows=$this->params()->fromQuery('rows', '10'); $url=$this->params()->fromPost('url', ''); |
Например можно реализовать вот так:
1 2 3 4 |
authorize{ update control { Auth-Type := `/usr/bin/php -f /etc/raddb/yourscript.php '%{User-Name}' '%{User-Password}'` } |
В этом случае, PHP должен только проверить логин&пароль и ответить либо Accept либо Reject.
Контроллер можно оформить например так:
1 2 3 4 5 6 7 |
public function sendresultAction(){ $response = $this->getResponse(); $headers = $response->getHeaders(); $headers->addHeaderLine("Content-type: application/json"); $response->setContent(json_encode(["result" => "ok"])); return $this->getResponse(); } |
Задача: если не установлены куки, перенаправить пользователя на страницу авторизации, вне зависимости от первоначальной точки входа в приложение
Решение: про первой инициализации модуля, создаем событие onDispath, в котором смотрим куки, и если они нас не устраивают — меняем шаблон и перенаправляем на другой контроллер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public function init(ModuleManager $manager){ // Получаем менеджер событий. $eventManager = $manager->getEventManager(); $sharedEventManager = $eventManager->getSharedManager(); // Регистрируем метод-обработчик. $sharedEventManager->attach(__NAMESPACE__, 'dispatch', [$this, 'onDispatch'], 100); } // Обработчик события. public function onDispatch(MvcEvent $event){ if (Auth::GetCookies("randomid4")==false){ // Получаем контроллер, к которому был отправлен HTTP-запрос. $controller = $event->getTarget(); // Получаем полностью определенное имя класса контроллера. $controllerClass = get_class($controller); // Получаем имя модуля контроллера. $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); $viewModel = $event->getViewModel(); $viewModel->setTemplate('layout/login'); $uri = $event->getRequest()->getUri(); $patch = $uri->getPath(); if ($patch!="/user/login"){ $uri->setPath('/user/login'); $response=$event->getResponse(); $response->getHeaders()->addHeaderLine('Location', $uri); $response->setStatusCode(301); $response->sendHeaders(); return $response; }; } } |
Казалось бы простая вещь, а телодвижений много. Странно. Но тем не менее, решение есть.
Конфигурация приложения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php return [ 'database'=>[ 'host' => '127.0.0.1', 'username'=>'root', 'password'=>'perferfre', 'basename'=>'mysql' ], 'modules' => [ 'Zend\Router', 'Zend\Validator', 'Application', ], 'module_listener_options' => [ 'module_paths' => [ './module', './vendor', ], 'config_cache_enabled' => false, 'config_cache_key' => 'application.config.cache', 'module_map_cache_enabled' => false, 'module_map_cache_key' => 'application.module.cache', 'cache_dir' => 'data/cache/', ], ]; |
Создаем фабрику IndexControllerFactory.php:
1 2 3 4 5 6 7 8 9 10 11 |
namespace Application\Controller; use Zend\ServiceManager\Factory\FactoryInterface; use Interop\Container\ContainerInterface; class IndexControllerFactory implements FactoryInterface{ public function __invoke(ContainerInterface $container, $requestedName, array $options = null){ $config = $container->get("ApplicationConfig"); return new IndexController($config); } } |
В конфигурации модуля:
1 2 3 4 5 6 |
'controllers' => [ 'factories' => [ Controller\IndexController::class => Controller\IndexControllerFactory::class, Controller\UserController::class => InvokableFactory::class, ], ], |
В контроллере:
1 2 3 4 5 6 |
class IndexController extends AbstractActionController{ var $sqln; public function __construct(array $config) { var_dump($config); } ... |