Кароче там.осносной скелет шаблона хтмп (для дефолтной конфы уии,тоесть контроллера 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']
}
}
ну тут понятно
Комментариев нет:
Отправить комментарий