Все записи автора Павел Грибов

Не запускается MySQL. Исправляем ))

Сначала смотрим логи mysql. Вдумчиво. Возможно что-то удастся понять и устранить (может банально кончилось место на диске).

Если не помогает, то в файле my.cnf добавляем строчку:

innodb_force_recovery=1

И далее пытаемся запустить mysql:

sudo service mysql start

Если запустилось — проверяем таблицы:

mysqlcheck -uroot -pукацука --auto-repair --all-databases

Далее убираем из my.cnf строчку innodb_force_recovery=1 иперезапускам сервис:

sudo service mysql start

Есть шанс что всё заработает 😉

Создание помошника (View Helper) для Zend Framework 3

Задача: естественным для Zend Framework способом выводить в шаблоне phtml некий HTML текст генерируемый на сервере.

Решение: создадим helper (помошник вида), на примере вывода каких то сообщений пользователю.

1) В настройках модуля анонсируем помошника:

            'view_helpers' => [                    
                    'factories' => [View\Helper\Messages::class => InvokableFactory::class],                   
                    'aliases' => ['mess' => View\Helper\Messages::class],                                
                ],

2) Создаем класс /module/Application/src/View/Helper/Messages

<?php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Application\Common\CommonFunctions;
// Этот класс помощника отображения разных сообщений пользователю (статичных)
class Messages extends AbstractHelper {  
public function __construct() {    
}    
public function renderErrorMessages() {    
    foreach (CommonFunctions::$err as $msg) {
        echo '<div class="alert alert-warning alert-dismissible fade show" role="alert">';
        echo "<strong>$msg</strong>";
        echo '<button type="button" class="close" data-dismiss="alert" aria-label="Close">';
        echo '<span aria-hidden="true">×</span>';
        echo '</button>';
        echo '</div>';
    };
}
    
}

3) В нутри шаблона layout.phtml теперь можно написать чтото вроде:

        <div class="container-fluid">
            <?php echo $this->mess()->renderErrorMessages(); ?>
            <?= $this->content ?>
            <hr>
            <footer>
                <p>© 2011 - <?= date('Y') ?> by <a href="https://грибовы.рф">Pavel Gribov</a></p>
            </footer>
        </div>

Zend Framework 3 перенаправление страницы из модуля приложения

Задача: если не установлены куки, перенаправить пользователя на страницу авторизации, вне зависимости от первоначальной точки входа в приложение

Решение: про первой инициализации модуля, создаем событие onDispath, в котором смотрим куки, и если они нас не устраивают — меняем шаблон и перенаправляем на другой контроллер:

    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;
                };                
        }
    }