Comments 43
Где хоть строчка кода? Вон из хабов «php» и «ООП» — тут один голый «Я пиарюсь» и «Хлам»
Вопросом на вопрос — Это по европейски.
Вы таки имеете шо-то протиф? Вы антиевропеит?
Вы спрашивали — Где хоть строчка кода? Вы это так просто спрашивали, чтобы потролить?
Вы таки извините, но как можно говорить о фреймворке, без примера кода. Это всё равно как говорить о каком-то исскустве без изображения
Повторюсь, тут описывается опыт использования, а не конкретное решение какой либо проблемы. Это не урок или презентация возможностей. Опять же повторюсь, если интересует конкретика, т.е. как именно я делал то-то и то-то, отпишите. Напишу отдельный пост с примерами или размещу пример в этом посте.
1. Пример кода самого интересного контроллера
2. Роутинг
3. Орм/надстройка к базе данных, если используется специфическая для данного фреймворка
4. Сделать больший акцент на continuous integration (примеры?)
5. Есть ли генераторы кода, для каких случаев?
Для начала хватит
2. Роутинг
3. Орм/надстройка к базе данных, если используется специфическая для данного фреймворка
4. Сделать больший акцент на continuous integration (примеры?)
5. Есть ли генераторы кода, для каких случаев?
Для начала хватит
1. Пример кода самого интересного контроллера — вот Base контроллер от которого наследую остальные.
2. Роутинг
3.Для ОРМ использются модели, вот пример post модели
4. Извиняюсь не понял вопроса, уточните пожалуйста и если нужны примеры сообщите что именно нужно.
5. Генераторы кода есть в oil пример использоания есть тут, сам не пользуюсь.
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 31.07.12
* Time: 17:45
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
use Fuel\Core\View;
use Fueltools\Pagination;
class Controller_Base extends \Fuel\Core\Controller_Template
{
public $template = 'index';
public $site_name;
public $catArr;
public $postArr;
public function before()
{
parent::before();
//Инициализация постоянно используемых данных, таких как модели, массивы с данными
$this->postArr = \Fuel\Core\DB::select('*')->from('posts')->cached(600)->execute()->as_array();
$this->catArr = \Fuel\Core\DB::select('*')->from('categories')->cached(600)->execute()->as_array();
$this->site_name = \Fueltools\StrConverter::upperFirst($_SERVER['HTTP_HOST']);
//Назначает виджеты по умолчанию
$this->widgetMenuLinks();
$this->widgetMasthead();
$this->widgetRndmLinks();
$this->widgetRndmPosts();
$this->widgetSearch();
$this->setIndexVars();
//$this->template->set_global('breadcrumbs', \Fueltools\Breadcrumb::create_links(), false);
}
protected function setIndexVars()
{
$this->template->site_name = $this->site_name;
}
/**
* Pagination
*/
protected function getPager($url, $total, $per_page, $segment)
{
$config = array(
'pagination_url' => $url,
'total_items' => $total,
'per_page' => $per_page,
'uri_segment' => $segment,
);
Pagination::set_config($config);
$pagination = Pagination::create_links();
$this->template->pager = $pagination;
}
/**
* Формирует виджет меню категорий в top menu
*/
protected function widgetMenuLinks()
{
$data = $this->catArr;
$catMenu = \Fueltools\TreeToMenu::forge()->_buildTree($data);
$this->template->catsmenu = $catMenu;
}
/**
* Формирует виджет с рандомными ссылками
*/
protected function widgetRndmLinks()
{
$data = $this->catArr;
shuffle($data);
$this->template->footerLinks = View::forge(
'widgets/footer_random_links',
array('links' => array_splice($data, 0, 5))
);
}
/**
* Формирует виджет Masthead
*/
protected function widgetMasthead($data = array())
{
$catArr = $this->catArr;
shuffle($catArr);
$data['links'] = array_splice($catArr, 0, 40);
$this->template->widget_masthead = View::forge('widgets/masthead', $data);
}
/**
* Формирует виджет правого блока на главной и в категориях
* @param $offset - кол-во выводимых статей
*/
protected function widgetRndmPosts($offset = 5)
{
$data = $this->postArr;
//\Fueltools\FB::info($posts);
shuffle($data);
$this->template->widget_rndmposts = View::forge(
'widgets/thumbnails',
array('posts' => array_splice($data, 0, $offset))
);
}
/**
* Виджет формы поиска
*/
protected function widgetSearch()
{
$this->template->search_form = View::forge('widgets/search/form');
}
}
2. Роутинг
<?php
return array(
'_root_' => 'blog', // The default route
'blog/(:num)' => 'blog/posts/$1', // The default route
'blog/category/(:num)-(:num)-(:any)' => 'blog/category/$1/$2/$3', // The default route
'_404_' => 'index/404', // The main 404 route
);
3.Для ОРМ использются модели, вот пример post модели
<?php
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 01.08.12
* Time: 14:54
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
class Model_Post extends \Orm\Model
{
protected static $_properties = array(
'id',
'title',
'short_content',
'content',
'created_at',
'author_id',
'cat_id',
'anchors',
'youtube',
);
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'author_id'
),
'categorie' => array(
'key_from' => 'cat_id'
)
);
}
4. Извиняюсь не понял вопроса, уточните пожалуйста и если нужны примеры сообщите что именно нужно.
5. Генераторы кода есть в oil пример использоания есть тут, сам не пользуюсь.
Прошу прощения.
2. Роутинг
3.Для ОРМ использются модели, вот пример post модели
2. Роутинг
<?php
return array(
'_root_' => 'blog', // The default route
'blog/(:num)' => 'blog/posts/$1', // The default route
'blog/category/(:num)-(:num)-(:any)' => 'blog/category/$1/$2/$3', // The default route
'_404_' => 'index/404', // The main 404 route
);
3.Для ОРМ использются модели, вот пример post модели
<?php
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 01.08.12
* Time: 14:54
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
class Model_Post extends \Orm\Model
{
protected static $_properties = array(
'id',
'title',
'short_content',
'content',
'created_at',
'author_id',
'cat_id',
'anchors',
'youtube',
);
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'author_id'
),
'categorie' => array(
'key_from' => 'cat_id'
)
);
}
\Fuel\Core\DB::select('*')->from('posts')->cached(600)->execute()->as_array();
Вы точно ORM используете?
И кстати, если не секрет — Какую задачу решает данный фреймворк? Чем его ОРМ лучше, например, доктрины?
Вы точно ORM используете?
И кстати, если не секрет — Какую задачу решает данный фреймворк? Чем его ОРМ лучше, например, доктрины?
А вы точно сделали всё, что написали?
Ни примеров кода, ни ссылки на сайт(который вы делали), ни нагрузок, раз уж вы сайт под них «оптимизировали».
Ни примеров кода, ни ссылки на сайт(который вы делали), ни нагрузок, раз уж вы сайт под них «оптимизировали».
Заметки ваши больше на бред похожи.
Мастера Йоды вы ученик?
— Получилась гибкое приложение, где почти вся мало мальски реюзабельная логика перенесена в отдельные пакеты с целью реюзать её в следующих проектах. Пакеты это нечто постоянное и переносимое из проекта в проект. Делаешь раз и решение никуда не пропадает — это действительно потрясающе.
— Сами контроллеры лишь выполняют проверки и направляют действия.
— Большое преимущество пакетов в том, что вы можете реюзать логику везде, в шаблоне, в контроллере, в модуле.
— За все время использования фримворка обновлял ядро несколько раз — обратная совместимость не ломалась, обновление сводилось к копипасту с заменой папки core.
— Fuel на столько прост на сколько того хочешь, например я мало использую unit тестирование, oil console, разделение разработки на dev и production, oil migration и многое другое. Но я знаю одно — когда они мне понадобятся, то я с легкостью начну их применять, так как в Fuelphp нет ничего сложного.
Не могу воспринимать это серьезно. Первый и последние пункты это адов треш и угар.
Ну так поделитесь, что вы там угарного нашли, все и «поугараем»
Потому что, похоже Вы не понимаете, о чём пишете. То что вам, за время написания простенького сайта пришлось несколько раз обновлять ядро фреймворка — говорит отнюдь не в его пользу. И уж тем более, пока вы действительно не столкнулись с коммерческим применением фреймворка — глупо говорить, что на нём «всё будет легко»
Похоже это вы не понимаете о чем пишите, откуда вы взяли — То что вам, за время написания простенького сайта пришлось несколько раз обновлять ядро фреймворка?
Обновлял за все время, а не за время написания данного приложения.
глупо говорить, что на нём «всё будет легко» — глупо было бы это не проверить на ближайшием «коммерческом проекте»
Проверили?
У себя спросите.
предлагаете рискнуть головой, ради проверки Вашего фреймворка?
Фреймворк и правда имеет место быть. Другой вопрос, что статья ни о чем.
Официальный сайт
The framework was started in late 2010 by Dan Horrigan then shortly after the team grew to include Phil Sturgeon, Jelmer Schreuder and Harro Verton. The team has decades of PHP experience between them and have all been involved with Open-Source projects such as CodeIgniter, PyroCMS, ExiteCMS and DataMapper ORM to name but a few.
Официальный сайт
Рад бы, но это не мой фримворк, не я его писал. Помоему вы блефуете и скорее всего нет у вас никакого коммерческого проекта.
Перечитайте свои сообщения — почти все они содержат «наезды» — верный признак понимания слабости своей позиции, и невозможности аргументированно отвечать на вопросы.
Обзор фреймворка, как ни странно, необходим другим людям, чтоб оценить переспективы использования его в реальных проектах. Ваша статья этой информации не даёт. В этом и беда.
Обзор фреймворка, как ни странно, необходим другим людям, чтоб оценить переспективы использования его в реальных проектах. Ваша статья этой информации не даёт. В этом и беда.
Делаешь раз и решение никуда не пропадает — это действительно потрясающе.
Открыли для себя слово «компонент»?
Большое преимущество пакетов в том, что вы можете реюзать логику везде, в шаблоне, в контроллере, в модуле
Что есть для вас «логика»?
я мало использую unit тестирование, oil console, разделение разработки на dev и production, oil migration и многое другое. Но я знаю одно — когда они мне понадобятся, то я с легкостью начну их применять, так как в Fuelphp нет ничего сложного
Код который не писался с расчетом на возможность юнит/функционального-тестирования как правилило тяжко тестируем. Тот же TDD переключает голову в немного другое состояние.
В любом случае это никакого отношения к фреймворку не имеет.
Зря я вестимо распинаюсь.
Открыли для себя слово «компонент»? — В fuelphp так называется пакет о котором и писал.
Что есть для вас «логика»? — В данном контексте код отвечающий за процессы, прием и обработку данных с целью получения определенного результата.
Магистру Йоде привет) Не зря.
Что есть для вас «логика»? — В данном контексте код отвечающий за процессы, прием и обработку данных с целью получения определенного результата.
Магистру Йоде привет) Не зря.
Выложите пример сложной view на pastebin, пожалуйста. Мне интересно как вы ре-используете логику в шаблонах.
А вот это уже вопрос) Рад. Держите —
\Fueltools\RepeateBlog::postLink($post) — формирует ссылку
<? foreach ($posts as $post) { ?>
<h1><? echo Html::anchor(
\Fueltools\RepeateBlog::postLink($post), // Тут
$post->title,
array('title' => $post->title)
)?></h1>
<div class="row-fluid">
<article>
<p class="muted">
<span class="label label-info"><? echo \Date::time_ago(strtotime($post->created_at)) ?></span>
</p>
<p><? echo \Str::truncate(strip_tags($post->content), 600) ?></p>
</article>
</div>
<hr class="soften">
<? } ?>
\Fueltools\RepeateBlog::postLink($post) — формирует ссылку
Смысл в том, чтобы в шаблоне вызывать формирование правильного формата даты, обрезать данные из модели?
Зачем это делать, если формированием даты занимается более высокоуровневый обьект — модель, которой помогают настройки интернационализации? А если time_ago для post нужно будет рисовать в одном формате, а для entity2 в другом? Copy/paste.
Экранирование и фильтрация это тоже задача контроллера. Вьюха должна получать уже готовые данные.
Не похоже на best-practice, И их в вас Fuel не вдолбил. Он и не смог бы, потому что framework лишь кодобаза, реализующая типовые функции. А вы тут превозносите его :)
ps:
если уж используете шорттеги, то проще так:
Зачем это делать, если формированием даты занимается более высокоуровневый обьект — модель, которой помогают настройки интернационализации? А если time_ago для post нужно будет рисовать в одном формате, а для entity2 в другом? Copy/paste.
Экранирование и фильтрация это тоже задача контроллера. Вьюха должна получать уже готовые данные.
Не похоже на best-practice, И их в вас Fuel не вдолбил. Он и не смог бы, потому что framework лишь кодобаза, реализующая типовые функции. А вы тут превозносите его :)
ps:
если уж используете шорттеги, то проще так:
A lot of text for <?=$user->getName()?>
Смысл в том, чтобы в шаблоне вызывать формирование правильного формата даты, обрезать данные из модели?
Зачем это делать, если формированием даты занимается более высокоуровневый обьект — модель, которой помогают настройки интернационализации? — помоему этого нет в Fuel, но если есть то да полностью с вами согласен.
Экранирование и фильтрация это тоже задача контроллера. Вьюха должна получать уже готовые данные. — ок я только за, как вы предлагаете решить с циклом ведь данные дергаются внутри foreach() Перенести цикл целиком в контроллер или как? Буду благодарен за дельные рекомендации.
Зачем это делать, если формированием даты занимается более высокоуровневый обьект — модель, которой помогают настройки интернационализации? — помоему этого нет в Fuel, но если есть то да полностью с вами согласен.
Экранирование и фильтрация это тоже задача контроллера. Вьюха должна получать уже готовые данные. — ок я только за, как вы предлагаете решить с циклом ведь данные дергаются внутри foreach() Перенести цикл целиком в контроллер или как? Буду благодарен за дельные рекомендации.
ок я только за, как вы предлагаете решить с циклом ведь данные дергаются внутри foreach() Перенести цикл целиком в контроллер или как? Буду благодарен за дельные рекомендации.
Например так, так или вот даже так.
Каждый раз когда программист вручную экранирует в шаблоне какие-то данные умирает котенок. Потому что забыть забываются и пропускаются такие штуки на-раз.
Ситуация, когда вьюха получила уже экранированные данные тоже нередка.
Шорт теги дело вкуса, я не использую.
!
Sign up to leave a comment.
Fuelphp в полевых условиях