Кукбук

Как на счет создать что-то типа русской cookbook? Я вот например прочитал основы, но пока не вкурил, с чего, собственно, начать-то) Раньше фреймворки не использовал, поэтому достаточно тяжело въезжаю…

  1. Скачать Ыыы отсюда http://www.yiiframework.com/download/ и распаковать в какую-либо папку.

  2. Если распаковываешь сразу на сервер с Linux, то прописать права доступа 755 для [куда_распаковал]/framework/yiic.php

Если под Windows (denwer), то корректируешь файл [куда_распаковал]\framework\yiic.bat:

находишь строчку, начинающуюся с

if "%PHP_COMMAND%" == ""

и дописываешь туда

set PHP_COMMAND=[диск_монтируемый_денвером]:usrlocalphp5php.exe
  1. заходишь в каталок framework, запускаешь yiic webapp [относительный_путь_к_приложению],

например: yiic webapp ./…/myapp1

А дальше начинается самое интересное…

Надо разбираться с контроллерами, отображениями, моделями и прочим согласно документации.

Вобщем, на сколько я понял - дальше наш путь лежит в [относительный_путь_к_приложению]/protected/, где все и лежит.

Абсолютно верно. В Definitive guide написано как создать первое приложение, рассказано про доступ к БД, есть прмер создания формы с валидацией, всеми делами, можешь начать с нее.

А вообще, задаешь конретные вопросы - получаешь конкретные ответы.

про то как поставить настроить и запустить firstapp я разодрался как раз)) А вот что делать дальше - хз. Ну например мне нужно чтобы из базы табличка заполнялась… Как это сделать правильно с учетом МВЦ и используя классы йии?.. Сейчас попробую проштудировать Дефенетив…

А ты почитай первый раздел. Он есть на русском. Просто создай базу, там таблицу. После этого через yiic shell - модель и CRUD - контроллер и представления для этой таблицы. Ну и дальше смотри как сделано, делай так же.

хм… А если мне например некоторую обработку нужно? Вот например в "Первом приложении" создается модель Юзер, которая, как я понял ни с чем кроме своей таблицы не завязана… Попробую объяснить на модели Юзер что мне непонятно…

  1. Почему именно model User? Т.е. имя User потому что у нас таблица так называется или мы используем какой-то шаблон фреймворка с именем Юзер?

  2. Откуда фреймворку при создании модели известно, что нам нужны такие функции, как New User и Manage Users. Есть какие-то значения по умолчанию?

  3. Почему они именно так называются? Т.е. где прописано

echo("...>New User<...")
  1. Почему class User это потомок CActiveRecord? Всегда ли создаваемый класс должен быть чьим-то потомком? Как быстро определить какой именно класс-предок нужно использовать дляя той или иной задачи?

  2. Во view часто используется конструкция

CHtml::...

Что это за CHtml? Где он описан? Как я понимаю он подставляет значения - результат выполнения какой-то функции… Как мне увидеть все стандартные функции и их описания?..

  1. Если я хочу пользователям дать ещё, например, категории, то достаточно ли мне будет просто изменить структуру в таблице БД и пересоздать модель или нужно будет как-то изменять и модель?

Вот вроде бы все, что могу спросить на вскидку…

П.С. Заранее извиняюсь, если какие-то вопросы покажутся тупыми или примитивными. Я раньше не работал с фреймворками и моделью МВЦ.

Мда… Объемные вопросы.

Во-первых идем вот сюда и читаем, что такое модель MVC

http://ru.wikipedia…View-Controller

Теперь по вопросам:

  • В МВЦ моель представляет собой данные. Данные хранятс в таблице. Для того чтобы их оттуда получить Yii предлагает ввести модель, которая обращается к данным. ОБращатьс можно и напрямуюу через SQL, но это другоая история.

    Так вот, для того чтобы работать с данными, ты генерируешь модель, название класса которой соответствует названию таблицы. (А исходя из соглашений (http://www.yiiframework.com/doc/guide/ru/basics.convention) - это слово с большой буквы)

  • Эти действия он создает по умолчанию. Ты же даешь команду CRUD User. CRUD = Create Update Delete - Создание, обновление, удаление. Он и создает соответствующие методы для этих действий. Почитай насчет фильтров и методов для действий (Action) раздел http://www.yiiframew...sics.controller

[*]Все что касается оформления, в том числе и это находится в представлении (View). В каждом действии (по умолчанию выполняется действие list) последней строчкой обычнои идет

[/list]

$this->render(‘viewName’, $params)
    ‘viewName’ - это имя предстваления, которое будет отображаться

    $params - это параметры, которые передаеются представлению. Это ассоциативный массив, ключи этого массива будут переменными в представлении. Посмотри как это сделано в примере, станет яснее.

  • Потому что модель, работающая с БД в Yii - потомок CActiveRecord. Active Record - это шаблон (паттерн) проектирования (design pattern)

    (http://ru.wikipedia.org/wiki/Шаблоны_проектирования)

    Active record - http://en.wikipedia…_record_pattern

    Еще - http://habrahabr.ru/blogs/ruby/11525/

    Не всегда создаваемій класс должен быть потомком, но в большинстве случаев удобно наследовать готовую функциональность. Ты же в большинстве случаев либо свое действие будешь создавать, либо модель, либо контроллер илиеще кучу всякого разного что есть в Yii. Конечно, тебя никто не ограничивай - пиши что хочешь. Но ознакомься сначала с тем что есть.

    Чтобы обпределить, какой класс тебе нужен, надо посмотреть, что в Yii уже есть. Смотри доки по АПИ (http://www.yiiframework.com/doc/api/), читай ПОЛНОСТЬЮ Definitive Guide - зря что ли переводили :)

    Ты ж не читал даже того что переведено до конца! В общем надо знать, что есть уже готовое. Не забудь посмотреть на существующие реасширения (http://www.yiiframework.com/extensions/)

  • CHtml - это так называемый хелпер (helper), он содержит функции, которые используются при формировании хтмл. Допустим, с помощью одного вызова ты быдешь формировать список, автоматически запомниая выбранное значение. Все контролы, которые создает этот хелпер требуют первым параметром модель. Читай об этом в разделе "Working with forms" (пока еще не перевели). Там подробно рассказано, как создат модель с ней работать, делать проверки и т.п.
  • Тебе будет достаточно просто добавить поле в БД. В модели не прописываются атрибуты таблицы, тамна основе определения таблицы прописываютс правила валидации этих атрибутов. Это не обязательно использовать, можно и закомментировать.

Главная рекомендация - почитай гайд. Весь. Разберись как функционирует контроллер, компонент и т.п.

Разберись с паттернами, которые используются - Active Record, Controller, MVC. Ты должен понимать, как это работает, чтобы грамотно использовать.

Вперед!

Спасибо. Буду штудировать доки)))

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

Фреймворк мне понравился но есть, на мой взгляд, недоработанные места, например не хватает некоторых вещей которые есть в Joomla:

JUri более функционален чем CUrlManager при работе с частями URL

JRequest полностью абстрагирует от работы с такими РНР массивам как $_GET, $_POST и т.п. К тому же он сразу производит очистку входящих данных с помощью JFilterInput

Вот возник ещё вопрос один…

Суть - хочу сделать ссылку на imdex.php?r=user (которое создается в first application) и чтобы она была видна только залогинившимся.

В test\protected\views\layouts\main.php

<?php $this->widget('application.components.MainMenu',array(


	'items'=>array(


		array('label'=>'Home', 'url'=>array('site/index')),


		array('label'=>'Contact', 'url'=>array('site/contact')),


		array('label'=>'Login', 'url'=>array('site/login'), 'visible'=>Yii::app()->user->isGuest),


		array('label'=>'Logout', 'url'=>array('site/logout'), 'visible'=>!Yii::app()->user->isGuest),


	),


)); ?>

Изменяю на

<?php $this->widget('application.components.MainMenu',array(


	'items'=>array(


		array('label'=>'Home', 'url'=>array('site/index')),


		array('label'=>'Contact', 'url'=>array('site/contact')),


		array('label'=>'Login', 'url'=>array('site/login'), 'visible'=>Yii::app()->user->isGuest),


		array('label'=>'Logout', 'url'=>array('site/logout'), 'visible'=>!Yii::app()->user->isGuest),


		array('lable'=>'Manage Users', 'url'=>array('user'), 'visible'=>!Yii::app()->user->isGuest)


	),


)); ?>

Но

  1. Нет надписи "Manage Users" в меню, вместо него просто поле-ссылка. Если на нее нажать, то я ухожу по ссылке r=site/user а не r=user.

Вопрос в том, чтобы

  1. отображалась надпись в меню, правильно работала ссылка. И ещё вопрос как сделать, чтобы залогинившись с админскими правами admin\admin я попадал в r=user/admin? Т.е. isGuest это проверка залогинился или нет, а как проверить права? Если это checkAccess, то что вводить в качестве параметров?
  1. Код надо писать внимательно. Текст не показывается просто потому что ошибка при написании ключа - lable вместо label

  2. Надо внимательно смотреть на то, что уже написано. Вторым параметром идет массив, в котором первое - это путь (в формате котроллер/действие), а потом идет ключ-значение (переменная-значение), которые будут дописваться в строку адреса)

Надо написать просто array('user/list') и все будет работать.

  1. Для проверки, админ ли он надо ввести роли. Читай вот здесь: http://www.yiiframew…ide/topics.auth

Можно, конечно, тупо проверить по логину, но этот вариант потом не может быть расширен.

Решить вопрос с разными линками просто так нельзя, надо формировать твой урл в контроллере, а в представление передавать просто переменую, в которой он будет. Вобщеговоря, эту логику можно разменстить и в представлении, но это противоречит концепции MVC.

спасибо. с 1 это я протупил))

Я когда читал про CI, пользовался чьим-то блогом, в котором чел писал, как писать блог…

  1. Добавление/удаление/редактирование/вывод записей (постраничный + навигация)

  2. Календарь

  3. Добавление/удаление/вывод комментариев

  4. Авторизация

  5. Привинтить FCKeditor (наверное, самое простое)

Думаю, нечто подобное для Ыыы было бы не только интересно, но и полезно.

А тут неинтересно - пример блога уже есть :))

Кроме того в англоязычном (официальном) кукбуке описаны ряд примеров и постоянно добавляются новые.

Quote

Кроме того в англоязычном (официальном) кукбуке описаны ряд примеров и постоянно добавляются новые.

Хм… что-то я его не нашел. Может, называется иначе?

Ссылочка, может есть?

http://www.yiiframew…m/doc/cookbook/