Intereting Posts
PHP нажимает новый ключ и значение в существующем массиве объектов Директива о вводе файлов с ng-моделью Отправить данные формы с помощью jquery 'ajax' и html form 'action' fgetcsv () игнорирует специальные символы, когда они находятся в начале строки! WordPress: используйте метод = "post" для множественного выбора языка Ограничить работу пользователя на основе IP или в Cookie? Возвращаемое значение рекурсивной функции PHP Symfony / Doctrine: класс не является допустимым сущностью или суперклассифицированным классом Как создать n-многоуровневую веб-архитектуру с помощью PHP? Как создать массив из файла CSV с помощью PHP и функции fgetcsv Генерировать массив из списка, разделенного запятыми, – PHP phpmyadmin отображает японские символы как кучу вопросительных знаков, даже если я устанавливаю кодировку и сортировку в utf8_unicode_ci Хотя я отлаживаю PHP Script в Eclipse, он не загружает расширение mysql реализация tinymce с php Заполнение полей в модальной форме с помощью PHP, jQuery

Любимые советы и возможности Kohana?

Вдохновленный другими вики сообществами, мне интересно узнать о менее известных советах, трюках и особенностях Kohana.

  • Пожалуйста, включите только один совет за ответ.
  • При необходимости добавьте версии Kohana.

Это сообщество wiki .

Формирование формы :: select () из результата базы данных

Kohana 3.1 и 3.0

$options = ORM::factory('model') ->order_by('title','ASC') ->find_all() ->as_array('id','title'); $select = Form::select('name', $options); 

Следует отметить, что это не ограничивается ORM и может использоваться для всех результатов базы данных (все они поддерживают as_array). Дополнительную информацию см. В информации о результатах базы данных .

Если вы хотите добавить опцию по умолчанию:

 $options = Arr::merge(array('Please select a value.'), $options); 

Показывать последний запрос

Kohana 3.1 и 3.0

 echo Database::instance()->last_query 

Взятый из « Коханы 3», как вы определяете ошибки, сделанные во время запроса? ,

Set Kohana :: $ environment

Вставьте эти строки в ваш .htaccess :

 SetEnvIf SERVER_ADDR "^(127\.0\.0\.1|::1)$" KOHANA_ENV=development SetEnvIf SERVER_ADDR "^((?!127\.0\.0\.1|::1).)*$" KOHANA_ENV=production 

теперь, если вы находитесь на локальном хосте, вы находитесь в режиме разработки, иначе вы находитесь в режиме производства

Изменить: добавлена ​​поддержка IPv6

Разница между this->request->route->uri() и this->request->uri() (Kohana 3)

 // Current URI = welcome/test/5 // Using default route ":controller/:action/:id" // This returns "welcome/test/5" echo $this->request->uri(); // This returns "welcome/test1/5" echo $this->request->uri(array( 'action' => 'test1' )); // This returns "welcome/index" echo $this->request->route->uri(); // This returns "welcome/test1" echo $this->request->route->uri(array( 'action' => 'test1' )); 

Как вы можете видеть, $ this-> request-> route-> uri () использует текущие значения по умолчанию для маршрута (id равно null), а $ this-> request-> uri () применяет текущие сегменты uri.

Добавление данных в сводные таблицы с использованием ORM

Функция add ORM add третий параметр, в котором вы можете указать дополнительные данные для сохранения в таблице 1pivot1.

Например, если у пользователя много ролей, а у роли много пользователей (через таблицу с именем 1roles_users1), вы можете сохранить информацию в таблице 1pivot1, передав массив ключей столбца и значения данных в качестве третьего аргумента методу add .

Кохана 3.1

Не поддерживается. Альтернативой было бы загрузить pivot table и добавить данные так же, как и в любую другую таблицу.

Kohana 3.0

 $user->add('role', $role, array('date_role_added' => time())); 

где $roleORM::factory('role', array('name' => 'user'));

Отключить автообновление для запросов AJAX

Эти примеры кода предполагают, что вы расширяетесь от контроллера шаблона.

Кохана 3.1

 public function before() { parent::before(); if (Request::current()->is_ajax()) { $this->auto_render = FALSE; } } 

Kohana 3.0

 public function before() { parent::before(); if (Request::$is_ajax) { $this->auto_render = FALSE; } } 

Подходящие маршруты

Вместо привязки привязки к жесткому кодированию в вашем HTML и PHP, это хорошая идея, чтобы отменить маршрутизацию. Это по сути означает, что вы определяете местоположения маршрутов, а затем используйте их; Если вам когда-либо понадобится изменить местоположение, это будет сделано в одном месте, а не в сотнях.

Маршруты можно определить в любом месте, но это хорошая практика, чтобы поместить их в бутстрап приложения или загрузочный модуль (init.php).

Они устанавливаются следующим образом:

 Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout'); 
  1. Название маршрута
  2. URL-адрес для сопоставления.
  3. Регулярное выражение для ограничения соответствия <part> .

Когда часть окружена скобками, эта часть является необязательной. Если пользователь не предоставил часть и вы хотите указать значение по умолчанию, используйте метод по умолчанию для указания значений.

 ->defaults(array('action' => 'login')); 

Kohana 3.1 и 3.0

Следующий код теперь используется для обратимых маршрутов. Путь URL-адреса может быть обновлен, и все ваши URL-адреса должны работать по-прежнему.

 Route::url('name', array('controller' => 'user', 'action' => 'login')); 

Установите base_url автоматически:

 Kohana::init(array( // ... 'base_url' => dirname($_SERVER['SCRIPT_NAME']), // ... )); 

Если ваш сайт размещен в 1 и 1, вы должны использовать:

 Kohana::init(array( // ... 'base_url' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"]))); // ... )); 

(взято из файла конфигурации Gallery3 )

Проверка внутреннего запроса

Они известны как суб-запросы. Взгляните на статью Сэма де Фрейсинеса: Масштабирование веб-приложений с помощью HMVC для более глубокого объяснения. Обратите внимание на начальную разницу между экземплярами vs.

Кохана 3.1

 if (Request::initial() !== Request::current()) { print 'Internal called made with Request::factory'; } 

Kohana 3.0

 if (Request::instance() !== Request::current()) { print 'Internal called made with Request::factory'; } 

HMVC + AJAX = is_remote ()

Эта функция проверяет как внутренние, так и AJAX-запросы. Это может быть удобно, если некоторые части страницы изначально загружаются с использованием техники HMVC и могут быть перезагружены с помощью AJAX. Поместите это с некоторым базовым контроллером, из которого вы расширите все свои правильные контроллеры (я называю это «базовым контроллером»):

 public function is_remote() { if ($this->request->is_initial()) { if ($this->request->is_ajax()) { return TRUE; } else { return FALSE; } } else { return TRUE; } } 

Более короткий (эквивалентный) способ написания:

 public function is_remote() { return ( ! $this->request->is_initial() || $this->request->is_ajax()); } 

Надеюсь это поможет.

Отобразить страницу с ошибкой

Если вам нужно отобразить страницу с ошибкой, у Kohana есть исключения для нее. После того как вы выбрали исключение, вы можете создать собственный обработчик исключений и показать страницу с ошибкой HTML. Вам понадобится переключатель, чтобы показать реальную ошибку в разработке.

Кохана 3.1

 throw new HTTP_Exception_404('The article :article was not found', array(':article' => $article->name)); 

Второй аргумент дает вам возможность заменить строки в сообщении об ошибке.

Kohana 3.0

Не содержит HTTP-исключений. Вы должны создавать свои собственные исключения и обрабатывать их. В Kohana есть учебник для этого: Kohana – Custom Error Pages

Чтобы выполнить SQL-запрос, например TRUNCATE mytable с подготовленными операторами , передать null качестве первого параметра для метода DB::query() . Полезно, когда запрос не подходит для любой из операций CRUD.