Интересует все о данном фреймворке, может кто видел книги в переводе или курсы, полезные советы, рецепты итд в общем все что не на первой странице гугла а то что можно было упустить.
недавно пентестели проект на этом фреемворке, нашли багу в заливке файлов, можно было шелл пролить в клиентской панеле....
Может я и ошибаюсь, но вроде в классе заливке, не достаточная фильтрация расширения была, надо бы перепроверить...
https://github.com/yiisoft/yii2/blob/master/framework/web/UploadedFile.php http://php.net/manual/ru/function.pathinfo.php Code: public function getExtension() { return strtolower(pathinfo($this->name, PATHINFO_EXTENSION)); }
Ну там список разрешенных расширений указывается через параметры формы, сам фреймворк не ограничивает, это на совести программистов
Если английский хороший, можно cookbook почитать, достаточно качественный материал. Написано yii разрботчиком (Alexander Makarov) - https://github.com/samdark/yii2-cookbook Второй вариант - это тупо читать оф. документацию, которая есть на офф сайте. Она там достаточно обширная, многое что описано с примерами. Так же можешь почитать рецепты - https://github.com/samdark/yiiframework_ru_cookbook Статей по yii2 навалом, поэтому точно найдешь помощь и инфу по всем интересующим тебя вопросам.
У yii хорошее сообщество. На форуме можно всегда получить ответ: http://yiiframework.ru/forum/viewforum.php?f=19 ну и ознакомься с этой темой http://yiiframework.ru/forum/viewforum.php?f=28 кукбук не зашёл мне почему-то
cookbook — это грубо говорят FAQ, который в виде снипетов решает частые проблемы разработчиков. Если с англ. все нормально, то можно безгранично гуглить и любой материал найти)
Дорос в потребностях до framework`а, выбрал yii. Изучая и решая насущные задачи, наткнулся на вопросы к которым ответы из google не подходят. Ответы нашлись в эксперементах и мануале. Делающим первые шаги в освоении yii предназначается. Я решил отделить сайт от framework`а, что бы использовать несколько Virtual Hosts, а yii иметь только один. Code: define('YII_DIR', '/var/www/yii'); define('WEB_DIR', '/var/www/localhost'); $config = [ /* * Переназначаю папку для controllers * Теперь их можно положить в /var/www/localhost/controllers * А не в дефолтную /var/www/yii/controllers * Только теперь надо писать namespace webroot\controllers; * Вместо namespace app\controllers; */ 'controllerNamespace' => 'webroot\\controllers', /* * Переназначаю директории для views */ 'layoutPath' => WEB_DIR . '/views/layouts', 'viewPath' => WEB_DIR . '/views', ]; Практика показала что удобней всего использовать следующий вид Pretty URLs: Code: 'rules' => [ '/' => 'site/open', '/<action:(open|complete|save)>' => 'site/<action>', Пареметры в GET передавать естественным для http способом. В Virtual Host в параметр Directory я добавил AllowOverride All. В корне сайта положил .htaccess Code: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php Когда возникла потребность иметь разные скрипты и стили, но layout иметь один, нашел способ вставлять их из view`шек. Code: $this->css['codemirror'] = // Засунет в head <<< HEREDOC <script src='/editor-asset/codemirror/lib/codemirror.js'></script> <link rel='stylesheet' href='/editor-asset/codemirror/lib/codemirror.css'/> HEREDOC; По умолчанию подгружаются css/site.css и jquery.js их заменил заглушками. JQuery потому что загрузка файла добавляется после body, а jquery-ui грузится в head и выдаёт ошибку. А site.css для красоты. Code: 'assetManager' => [ 'assetMap' => [ 'css/site.css' => '/editor-asset/editor/empty.css', 'jquery.js' => '/editor-asset/jquery/empty.js', ], ], Некоторые фичи которые мне пригодились в написании actions Code: return $this->redirect($url); // редирект $filename = \Yii::$app->request->queryParams['filename']; //использовал для доступа к $_GET['filename'] \Yii::$app->request->getRawBody(); // принимаю post с json \Yii::$app->layout = false; // отключаю layout и view return $this->renderContent($json); // возвращаю json в ответ на $.post( "/save", data, func, 'json'); В качестве бонуса: Функция автодополнения имён файлов. Code: function filenameComplete(string $path) { if (empty($path)) { return false; } $pathinfo = pathinfo($path); if (!is_array($pathinfo)) { return false; } if (preg_match('/^(.+)\/$/', $path, $matches)) { $dirname = $matches[1]; $prepend = ''; } else { $dirname = $pathinfo['dirname']; $prepend = $pathinfo['basename']; } $filenames = @scandir($dirname); if (!is_array($filenames)) { return false; } $result = []; $prepend = preg_quote($prepend); foreach($filenames as $filename) { if (preg_match('/^'.$prepend.'.*$/', $filename) == 1) { if ($dirname == '/' ) { $filename = "/{$filename}"; } else { $filename = "{$dirname}/{$filename}"; } array_push($result, $filename); } } return $result; }