что то ищешь тут паря?

вторник, 18 декабря 2012 г.

уии уии)))

Кароче там.осносной скелет шаблона хтмп (для дефолтной конфы уии,тоесть контроллера site)
лежит в D:\wamp\www\yiitrener\protected\views\layouts\main.php
а внутрь страницы генерится D:\wamp\www\yiitrener\protected\views\site\index.php типа страница индекс

Это все генерится потому что контроллер сайт D:\wamp\www\yiitrener\protected\controllers\SiteController.php внутри имеет
/**
* This is the default 'index' action that is invoked
* when an action is not explicitly requested by users.
*/
public function actionIndex()
{
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
$this->render('index');
}

такой вот екшн а все это генерится потому что вы поняли.когда заходишь на сайт
то первый запрос http://localhost/mysite/index.php?r=site/index

 site/index вот эта тема в запросе называется маршрут.он типа и определяет какой какой контроллер и действие будет выполняться

ВТОРОЕ:
когда генерирую модель User (это на сайте в руководстве "создаем первое приложение")с помощю ГИИ на таблицу tbl_user дефолтную где висят айдишки парли и емейлы
ТО ГРУБО ГОВОРЯ МОДЕЛЬ ЯВЛЯЕТСЯ ВЮХОЙ НА ЭТУ ТАБЛИЦУ!!!!!!

Теперь еще
когда я генерирую КРУД то я сразу генерю и контроллер и вьюху
.ща посмотрю как это работает

Generating code using template "D:\wamp\www\trener\framework\gii\generators\crud\templates\default"...
generated controllers\UserController.php
generated views\user\_form.php
generated views\user\_search.php
generated views\user\_view.php
generated views\user\admin.php
generated views\user\create.php
generated views\user\index.php
generated views\user\update.php
generated views\user\view.php
done!

Вообщем на модель сгенерило контроллер одноименный а вот контроллер ИД я сгенерил юзер с маленькой буквы и создало вьюхи на основе его(а сам контроллер я так понял привязался с имени модели(тоесть Юзер с большой буквы)

http://localhost/yiitrener/index.php?r=user

и потом я перехожу по этой ссылка (получается роут на контроллер только(все таки с маленькой получается это только егенерится в файлах с большой контроллер а имя его маленькое на самом деле)

и мне выводит контроллер на чтение всю таблицу.
но когда хочешь редактить по нужно авторицироваться
такие дела

АГА получается в базовом лейауте двухполосная модель
.зашел в D:\wamp\www\yiitrener\protected\controllers\UserController.php

public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}

сразу смотрим что там подключаются фильтры один из них ассесс контрол

я взял да убрал его.просто удалил.обновил страницу и смог редактировать.
УЖЕ ИНТЕРЕСНЕЕ.НАЧИНАЮ ПОНИМАТЬ.тоесть к контроллеру можно подрубать фильтры авторизации и т д

Идем дальше

дальеш в контроллере вот такое

public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}

ну тут права идут.более ли менее понятно

дальше идет вот что(это вс е в контроллере)

public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
));
}

АГА.вот начинают описываться екшны описанные выше(например
allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
ВОТ он и вью)

тоесть я так понимаю в этой функции екшнвью он рендерит
вьюшку по этому екшну(только вот вроде указана модель.немного непонимаю this

Псевдо-переменная $this доступна в том случае, если метод был вызван в контексте объекта. $this является ссылкой на вызываемый объект. Обычно это тот объект, которому принадлежит вызванный метод

БЛЯТЬ все равно непонимаю откуда берется название модели.ладна то такое

пойдем дальше

public function actionCreate()
{
$model=new User;

// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);

if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}

$this->render('create',array(
'model'=>$model,
));
}
вот вам криейт и т д.тут все понятно.тут расписываются екшны

ладна буду дальше читать про контроллер а то я тут уже залез в исходники.потому буду смотреть


ИДЕМ ДАЛЬШЕ

Начиная с версии 1.1.4, в Yii появилась поддержка автоматической привязки параметров к действиям контроллера. То есть можно задать именованные параметры, в которые автоматически будут попадать соответствующие значения из $_GET.

Для того чтобы показать, как это работает, предположим, что нам нужно реализовать действие create контроллера PostController. Действие принимает два параметра:
category: ID категории, в которой будет создаваться запись (целое число);
language: строка, содержащая код языка, который будет использоваться в записи.

Скорее всего, для получения параметров из $_GET в контроллере нам придётся написать следующий скучный код:
class PostController extends CController
{
public function actionCreate()
{
if(isset($_GET['category']))
$category=(int)$_GET['category'];
else
throw new CHttpException(404,'неверный запрос');

if(isset($_GET['language']))
$language=$_GET['language'];
else
$language='en';

// … действительно полезная часть кода …
}
}

вот это я понял.потом берем в инсерт пихаем категорию и язык
и текст собственно говоря.да и все.

class PostController extends CController
{
public function actionCreate($category, $language='en')
{
$category=(int)$category;

// … действительно полезная часть кода …
}
}

Мы добавляем два параметра методу actionCreate. Имя каждого должно в точности совпадать с одним из ключей в $_GET. Параметру $language задано значение по умолчанию en, которое используется, если в запросе соответствующий параметр отсутствует. Так как $category не имеет значения по умолчанию, в случае отсутствия соответствующего параметра в запросе будет автоматически выброшено исключение CHttpException (с кодом ошибки 400).

можно и так например.если все четенько совпадает

Начиная с версии 1.1.5, Yii поддерживает указание массивов в качестве параметров действий. Использовать их можно следующим образом:
class PostController extends CController
{
public function actionCreate(array $categories)
{
// Yii приведёт $categories к массиву
}
}

В ВОТ ТУ Я НЕ ПОНЯЛ.ну массив ну и что.оно что будет выбирать?ключи или значения?

Начиная с версии 1.1.7, автоматическая привязка параметров работает и с действиями, оформленными в виде классов. Если метод run() в классе действия описать с параметрами, то эти параметры наполняются соответствующими значениями из HTTP-запроса:
class UpdateAction extends CAction
{
public function run($id)
{
// $id будет заполнен значением из $_GET['id']
}
}

ну тут понятно







Комментариев нет:

Отправить комментарий