Помогите исправить собственное быдлокодерство

WMix

герр M:)ller
Партнер клуба
gray
а если так?
PHP:
if (checkRights($id, array('coworker', 'manager') ))
ибо
if(!isLogist($id)) if(!isAdmin($id)) вызовут еще 2 раза базу!
 
  • Like
Реакции: gray

craz

Нестандартное звание
в таком случае у тебя в каждом Action записана строка $this->veiw->isAdmin
а еще в каждую $form и в каждой ControllerHelper и в каждый ActionHelper нужно тоже передавать с таким подходом... не геморойно ли?
вот я не понимаю, если честно проблемы, потому что она у меня не возникала... Не было у меня желания куда-то все это инъектить...
А уж тем более в каждом экшене... это делать, не делаю я так...
 

Mr.Nobody

Новичок
Доброе утро.
Переделал ф-ю. Вот что получилось:
PHP:
function isAdmin($id){
		static $truefalse;
		if (!isset($truefalse[$id])) {
			$query="SELECT 1 FROM `users` `t1`, `groups` `t2` WHERE `t1`.`id`='".mysql_real_escape_string($id)."' AND `t2`.`sysName`='admin' AND `t1`.`group_id`=`t2`.`id`;";
			$result=mysql_query($query) or die ("Ошибка выполнения запроса к БД: ".mysql_error());
			$truefalse[$id]=(bool)mysql_num_rows($result);
		}
		return $truefalse[$id];
}
Так лучше не писать
PHP:
return $truefalse[$id]
если я передам туда к примеру число 10000, а массив
PHP:
$truefalse
будет размером 10 элементов мы получим Notice: Undefined offset.Использовать isset в данном случае не лучший вариант,если передам в вашу функцию isAdmin,в место числа null, то меня пустят внутрь блока if.Например:
PHP:
function isAdmin($id)
{
    static $arSomeInformation;
    $arSomeInformation = array(1, 2, 3, 4, 5);
	if (!isset($arSomeInformation[$id])) {
        echo "It works";
		return true;
     }
	 return false;
}
var_dump(isAdmin(null));// true
ну, а вот так уже более корректный результат получим
PHP:
function isAdmin($id)
{
    static $arSomeInformation;
    $arSomeInformation = array(1, 2, 3, 4, 5);
    if (!empty($arSomeInformation[$id])) {
        echo "It works";
		return true;
    }
	return false;
}var_dump(isAdmin(null));// false
 

gray

Новичок
Несколько вопросов по терминологии, которая упоминалась выше.
Что такое или где точнее понять?

1.
Аааа я понял тут архитектура кривая, блин, а я то... isAdmin должен браться из сессии пользователя, а проверяться чуть ли не в бутстрапе.
Я правильно понял что речь о ссылка, а не о какой-то терминологии в php?

2.
один раз в контроллере, 15 раз в разных моделях, 10 раз во вью и во всех _partials остальное понятия не имею, возможно в bootstrape а возможно в хелперах если говорить о zend
Я так понимаю здесь речь идет о MVC?
Что такое хелперы и _partials? Точнее в какой области о них читать?

3. viewHelper - это тоже речь о mvc?

4.
вызываться только в просессе бутстрапинга приложения.
Поясните пожалуйста что это означает? Нашел термин, но он относится к экономике, а не программированию.
 

craz

Нестандартное звание
Я правильно понял что речь о ссылка, а не о какой-то терминологии в php?
нет совершенно не верно, смотри в приложении, более менее среднем, есть такое понятие как точка входа. Это файл index.php именно он загружает все все. По сути его можно называть бутстрапом, но опять же ты тянешься к знаниями, поэтому есть практика разделить начальную настройку и саму загрузку приложения. Вот на индексный файл ложиться задача настроить все необходимое, а файл бутстрапа будет загружен из него и получит все настройки.
Пример индексного файла из ZF1
PHP:
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));
 
// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));
 
// Typically, you will also want to add your library/ directory
// to the include_path, particularly if it contains your ZF installed
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));
 
/** Zend_Application */
require_once 'Zend/Application.php';
 
// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
Это тот самый бутстрап.
PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');
 
        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);
 
        // Return it, so that it can be stored by the bootstrap
        return $view;
    }
}
Щас я надеюсь кто-нибудь кинет пример для других фреймворков, или своих "лесипедов"(в хорошем смысле слова).
 
  • Like
Реакции: gray

WMix

герр M:)ller
Партнер клуба
gray
это все про Zend было написанно... это не обязательно MVC это может быть и у тебя есть... если кусочек программного кода используется множество раз, это можно вырезать в одно место и это только часть Контроллера или Вью... назовем это Хелпер
 

WMix

герр M:)ller
Партнер клуба
бутстрапинг имеется в виду начальная загрузка приложения... когда все инициируем
 

gray

Новичок
нет совершенно не верно, смотри в приложении, более менее среднем, есть такое понятие как точка входа. Это файл index.php именно он загружает все все. По сути его можно называть бутстрапом, но опять же ты тянешься к знаниями, поэтому есть практика разделить начальную настройку и саму загрузку приложения. Вот на индексный файл ложиться задача настроить все необходимое, а файл бутстрапа будет загружен из него и получит все настройки.
Пример моего индексного файла:
PHP:
<?php
/**
 * Основная страница системы. Загружается практически всегда
 */
session_start();
require ($_SERVER["DOCUMENT_ROOT"].'/crm/lib/vars.php');
require (_CRM_HOME_DIR_.'lib/functions.php');
require (_CRM_CLASSES_DIR_.'_class.include.php');
Т.е. по аналогии у меня бустрапом является vars.php в котором я определяю начальные переменные и пути к директориям, так?
 

WMix

герр M:)ller
Партнер клуба
да наверно можно так сказать...
bootstrap... настроить адаптер базы данных, настроить пользователя, считать конфигурацию, Loger, debugger, все что нужно в любом вызове короче
 

craz

Нестандартное звание
Т.е. по аналогии у меня бустрапом является vars.php в котором я определяю начальные переменные и пути к директориям, так?
нет твой vars.php не бутстрап, это настройка просто, то есть:
PHP:
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
 

Василий М.

Новичок
мой:

PHP:
<?php
try
{
	require('./configuration/base.php');

	$context = Krugozor_Context::getInstance();
        $context->setRequest(Krugozor_Http_Request::getInstance())
            ->setResponse(Krugozor_Http_Response::getInstance())
            ->setDb(Krugozor_Database_Mysql::create(
                        Krugozor_Registry::getInstance()->DATABASE['HOST'],
                        Krugozor_Registry::getInstance()->DATABASE['USER'],
                        Krugozor_Registry::getInstance()->DATABASE['PASSWORD']
                    )->setDatabaseName(Krugozor_Registry::getInstance()->DATABASE['NAME'])
                     ->setCharset(Krugozor_Registry::getInstance()->DATABASE['CHARSET'])
                   );

    $application = new Krugozor_Application($context);
    $application->enabledDebugInfo(Krugozor_Registry::getInstance()->DEBUG['ENABLED_DEBUG_INFO'])
                ->setRoutesFromPhpFile('./configuration/routes.php');
    $application->run();
}
catch (Exception $e)
{
	error_log($e->getMessage(), 0);
}
 
  • Like
Реакции: craz

fixxxer

К.О.
Партнер клуба
ужос нах, у самого глаза не лопаются от всех этих сеттеров и гетинстансов?

Krugozor_Database_Mysql::createFromConfig( Krugozor_Registry::getInstance()->Database ) не?

(а еще в Registry можно подвесить __callStatic. Krugozor_Registry->Database() не приятнее ли?)

алсо, слишком много синглтонов. Одного registry на приложение достаточно
 

Василий М.

Новичок
где много? реквест, респонс, контекст и регистр. все.

Krugozor_Database_Mysql::createFromConfig( Krugozor_Registry::getInstance()->Database ) не?
нет. это не красиво.

(а еще в Registry можно подвесить __callStatic. Krugozor_Registry->Database() не приятнее ли?)
регистр к хранению объекта БД отношения не должен иметь. он хранит настройки и конфиги.
 

Вурдалак

Продвинутый новичок
А к чему бы request и response быть синглтонами? Request может быть:
  • основной;
  • подзапрос aka HMVC или как его там еще называют;
  • PHP:
    $response = $downloadMaster->download($request); // для работы с удаленным сервером

Какого хера ты везде лепишь свой префикс к именам классов? Страшный ты человек.
 

craz

Нестандартное звание
Какого хера ты везде лепишь свой префикс к именам классов? Страшный ты человек.
Нормально делает я считаю, я вот никак не наберусь смелости) прилепил какой нить Craz_ClassName - и все пипец теперь это ТВОЙ код)
 

Василий М.

Новичок
Какого хера ты везде лепишь свой префикс к именам классов?
Что значит какого хера? Пространство имен это.

PHP:
подзапрос aka HMVC или как его там еще называют;
побрейся бритвой оккама.

Страшный ты человек.
Не страшнее, чем ты.
 
Сверху