[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уроки Kohana + ZendFramework
Семён
Итак начну с того, что все контроллеры в Default-е лежат у нас в папке
application\classes\controller

Создадим новый php файлик в этой папочке и назовём его myhello.php
application\classes\controller\myhello.php


И в начинке напишем:
<?php

defined('SYSPATH') or die('No direct script access.');

class Controller_Myhello extends Controller {

public function action_privet() {
echo "HELLO WORLD";
}
}


И вернёмся к 2-ому уроку, в файле bootstrap находим строки
Цитата
Route::set(........

и перед ними напишем:
Route::set('myhello', 'myhello(/<action>')
->
defaults(array(
'controller' => 'myhello',
'action' => 'privet',
));

Так мы сделали / указали правила для нашего контроллера:
т.е. теперь мы можем работать с http://мой_сайт/myhello/privet


myhello(/<action>)

<action> говорит о том, какой action может быть вызван в контроллере.
        ->defaults(array(
'controller' => 'myhello',
'action' => 'privet',

в default-s указываем параметры по умолчанию.

Сохраняем переходим в http://мой_сайт/myhello/privet
Наблюдаем HELLO WORLD
ДА и чуть не забыл, у вас должен быть включен RewriteMode.
Если что потребуется дописать открывайте .htaccess и модифицируйте его:
Например мой выглядит так в тестовом project-e:
AddDefaultCharset utf-8
#php_value upload_max_filesize 20M
#php_value post_max_size 20M
#php_value max_execution_time 200
#php_value max_input_time 200


AddCharset utf-8 *
<
IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]



В след уроке будем это переносить в шаблон



Спустя 2 месяца, 1 день, 3 часа, 42 минуты, 19 секунд (19.05.2011 - 14:37) Krevedko написал(а):
почитаю вечерком. спасибо за твой труд

Спустя 6 часов, 7 минут, 36 секунд (19.05.2011 - 20:45) Семён написал(а):
Могу продолжить там по идее след. можно краткий по View сделать

Спустя 2 часа, 48 минут, 3 секунды (19.05.2011 - 23:33) Krevedko написал(а):
не совсем понятно, зачем в роутере прописывать дефолт, когда мы заходим по адресу
http://мой_сайт/myhello/privet

оно ведь и так сработает.
чтобы это же срабатывало при заходе на http://мой_сайт

и то что там уже есть дефолт в виде

Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));

? может надо тут поменять на твои ?
Просто в КИ несколько по другому.
Там дефолт пишется просто

$route['default_controller'] = "main";
а роуты что-то типа

$route['(:num)/(:num)/(:num)/([a-z]+)'] = "main/index/$1/$2/$3/$4";

Спустя 15 минут, 43 секунды (19.05.2011 - 23:49) Семён написал(а):
У тебя стандратный роутер просто написан, вот и работают такие конструкции
<controller>(/<action>(/<id>)), однако я стараюсь таких динамических правил избегать и указывать жёсткие пути )

Спустя 11 дней, 15 часов, 19 минут, 52 секунды (31.05.2011 - 15:09) Krevedko написал(а):
просмотрел пару видео курса Морковина. смотрю, что он наследует не просто контроллер, а controller_template.
а что обычный контроллер как-то по другому с темплейтами работает ?

Спустя 28 минут, 34 секунды (31.05.2011 - 15:37) Семён написал(а):
На сколько я помню, это пережитки Ko2, где явно вызывался render smile.gif

Спустя 6 часов, 38 минут, 11 секунд (31.05.2011 - 22:15) Krevedko написал(а):
продолжение уроков будет ?

Спустя 1 час, 20 минут, 43 секунды (31.05.2011 - 23:36) Семён написал(а):
Krevedko
Завтра (получается уже сегодня) на работе напишу след. урок )
Как и обещал:
http://phpforum.ru/index.php?showtopic=45943&hl=

Спустя 10 часов, 30 минут, 46 секунд (1.06.2011 - 10:07) Krevedko написал(а):
прэээлесно. прэээлесно

Спустя 6 дней, 11 часов, 4 минуты, 14 секунд (7.06.2011 - 21:11) AmberLEX написал(а):
Если нужно контроллер засунуть в папку, например adm/welcome.php, то имя класса будет выглядеть по идее так: class Controller_Adm_Welcome, но че-то не работает. Набираем адрес сайта и ошибка, как сделать-то?

Спустя 12 часов, 53 минуты, 55 секунд (8.06.2011 - 10:05) Семён написал(а):
У вас вложенный контроллер лежит в папке application\classes\controller ?
Если так проверьте свой Router

Спустя 9 часов, 51 минута, 30 секунд (8.06.2011 - 19:56) AmberLEX написал(а):
В общем нужно примерно так:
В папке application/classes/controller расположить например еще две папки:
adm - для контроллеров админки
cmn - для контроллеров сайта
а в папке controller - могут быть еще файлы (2-3 штуки), общие.
Например, cmn.php в котором есть методы before() и after() которые будут выполняться перед и после экшена, какие-то установки для шаблонов, мета-данные для страницы, че-то однотипное в общем и т.п.
Я примерно так мыслю приложение строить. Ну это когда усложняться будет.
Вот.
Если мы набираем в адресе mysite.ru/welcome/ - то сработать должен контроллер из папки cmn, а если mysite.ru/adm/welcome/ - то из папки adm Можно так сделать?

Спустя 7 дней, 17 часов, 33 минуты, 15 секунд (16.06.2011 - 13:30) AmberLEX написал(а):
Автор запропастился куда-то(

Спустя 54 минуты, 11 секунд (16.06.2011 - 14:24) Семён написал(а):
Честно говоря бредовая идея, корень есть корень он итак подразумевает под собой папку cmn:
Вот пример роута для adm

Route::set('adm', '<directory>(/<controller>(/<action>))', array('directory'=>'adm(/\w+?)?'))
->
defaults(array(
'controller' => 'home',
'action' => 'index',
));


Аналогично потребуется сделать для cmn, добавив в исключения те 2-3 файла, которые должны лежать в корне.

Извиняй, но это откровенный бред.

Спустя 5 часов, 57 минут, 40 секунд (16.06.2011 - 20:22) AmberLEX написал(а):
Ладно, корень так корень. А куда тогда положить мои классы, например, которые расширяют (наследуют) кохановские? Не будут же они лежать тоже в корне, для них тогда папка нужна какая-то?

Спустя 12 часов, 3 минуты, 20 секунд (17.06.2011 - 08:25) Семён написал(а):
Ну я кладу сторонние / свои библиотеки/классы в Modules затем их прописываю в bootstrap, например:

Kohana::modules(array(
'database' => MODPATH . 'database', // Database access
'kminify' => MODPATH . 'kminify', // Minification JS && CSS //Вот интегрировал minify в Kohana
));


Однако тотже самописный Paginator лежит в APP_DIR/classes/pagination.php


и в контроллерах вызывается просто:
$pagination = new Pagination;


Хочешь загрузить из папки APP_DIR/classes/my/class/name.php
Kohana::auto_load("My_Class_Name");
$myClass = new Name;


Если у Вас статистически классы то просто
My_Class_Name::method

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.