Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 14 reacties
Bron: Yii PHP Framework, submitter: BBrunekreeft

Yii PHP Framework logo (75 pix)Yii is een component based php-framework, met volgens de ontwikkelaars zeer goede prestaties, die het bijzonder geschikt maken voor het ontwikkelen van grootschalige webapplicaties. Het framework bevat tal van opties, zoals mvc, dao/ActiveRecord, I18N/L10N, caching, jQuery-based AJAX support, scaffolding, input validation, widgets, events en theming. Voor meer informatie verwijzen we naar deze pagina. De ontwikkelaars hebben versie 1.1.16 uitgebracht en hierin zijn de volgende veranderingen en verbeteringen aangebracht:

New
  • #2955: Added official support for MariaDB
Enhanced
  • Public method CFileHelper::createDirectory() has been added
  • Added proper handling and support of the symlinked directories in CFileHelper::removeDirectory(), added $options parameter in CFileHelper::removeDirectory()
  • #89: Support for SOAP headers in WSDL generator
  • #94: Web services: Implement document/literal encoding for WDSL
  • #106: Added getters to CGridColumn to allow getting cell contents for extended use cases of CGridView
  • #132: Added ODBC support in CDbConnection
  • #182: CSort: allow arrays in asc/desc keys of virtual attributes
  • #640: Introduce bigpk and bigint column types in each class extending CDbSchema
  • #873: CStatRelation (CActiveRecord::STAT) now supports scopes
  • #1372: CDbCommandBuilder::createMultipleInsertCommand() now throws exception if data array is empty
  • #1515: Post-JOIN operations (use|force|ignore index()) support in relational queries
  • #1593: Allow access to exception currently processed by CErrorHandler
  • #1893: Added Schema and native connection support for the CUBRID DBMS (http://www.cubrid.org/)
  • #2119: add `y` pattern to CDateTimeParser
  • #2540: Enable CJSON to use JsonSerializable interface when serializing objects
  • #2630: CLinkPager $nextPageLabel, $prevPageLabel, $firstPageLabel and $lastPageLabel can now be false to disable the buttons
  • #2640: Enable diff on gii generated SQL files
  • #2664: Added support for HTTP PATCH requests to CHttpRequest
  • #2683: Application views generated by webapp command are now using HTML5 by default
  • #2688: CHtml::beginForm() now supports additional HTTP methods, via a hidden `_method` field.
  • #2722: CFileHelper::findFiles() accepts absolutePaths in $options and returns absolute paths if true or relative ones otherwise (defaults to true)
  • #2734: Request::getPreferredLanguage() is now able to select a best matching between supported and requested languages
  • #2737: CFileCache: added cachePathMode and cacheFileMode options to set modes used by chmod() for cache directory and files
  • #2758: Updated phpdoc in blog demo to match current IDE supported syntax
  • #2777: Allow Yii::import() and Yii::createComponent() to import classes that are loaded by other autoloaders e.g. composer
  • #2791: requirements/index.php: added CRYPT_BLOWFISH check for CPasswordHelper
  • #2799: Add HTML5 input support for color, datetime, datetime-local, week and search to CHtml and CActiveForm
  • #2817: Allow specifying $colums and $refColumns arguments as array in various CDbSchema methods
  • #2850: Parameter 'id' added for 'ajaxUpdateError' js function at 'CListView' and 'CGridView'
  • #2851: Improved Mime-Type detection by using the `mime.types` file from apache http project to dected mime types by file extension
  • #2852: Refactored ShellCommand to be easier to extend
  • #2908: Add insertMultiple to Migrations
  • #3014: Allow changing the database used by ActiveRecord in beforeCount() like it is possible in beforeFind() already
  • #3023: Added support for formatting DateTime instances to CFormatter
  • #3027: Added custom encodeLabel attributes of the CMenu items
  • #3048: CApcCache is now compatible with APCu
  • #3049: 'cli' mode detection at CConsoleApplication improved
  • #3061: 'jquery.yiiGridView' and 'jquery.yiiListView' allows to handle all update options via history state data
  • #3068: Added CDbCommand::naturalLeftJoin() and CDbCommand::naturalRightJoin()
  • #3115: Updated phpdoc for better code completion in modern IDEs
  • #3147: Updated Request::getIsSecureConnection() to work with lower and uppercase config values
  • #3156: It is now possible to override the models PK using primaryKey() method, even if the table defines one
  • #3182: Added namespace support for controllers in subdirectories
  • #3202: Adding support for the `X-HTTP-Method-Override` header in CHttpRequest
  • #3211: Added support for PHPUnit 3.8+ in the bootstrap
  • #3222: 'summaryTagName' and 'emptyCssClass' options added to CBaseListView
  • #3225: Added CForm::errorSummaryHeader and CForm::errorSummaryFooter, used like in CActiveForm::errorSummary()
  • #3228: Added an ability to migrate to the certain time
  • #3277: CHtml::checkBoxList and radioButtonList to take into account closeSingleTag for <br>
  • #3307: Adding attribute localeClass to CApplication
  • #3314: Removed async from special attribute list enabling async=false for scripts
  • #3324: Added syslog log route
  • #3346: Added `fileHeader` option to MessageCommand
  • #3349: Added errorCallback to CActiveForm::$clientOptions
  • #3351: Allow array attribute for CFileValidator even if `maxFiles` is not > 1
  • #3359: Added merge parameter to CModule::setModules
  • #3391: Exception and log for not existed ClientScript package
  • #3500: Framework now responds with HTTP protocol version requested
  • #3513: Added 'getExtensionByMimeType' method to CFileHelper class
  • #3533: Added Yii and YiiBase classes to composer autoloader
  • #3571: Extracted rendering of data cell in CGridView.renderTableRow() to separate method for extensibility
  • #3623: `itemscope` attribute is now rendered as HTML5 boolean
Changed
  • #2025: Upgraded jQuery to 1.11.1
  • #3042: CPasswordHelper::generateSalt() now returns salt with $2y$ cost
  • #3137: Upgraded HTMLPurifier to 4.6.0
  • #3298: ListView and GridView: Added check for the existence of a href attribute in link pager
  • #3464: Updated multifile plugin used by CMultiFileUpload to version 1.48
  • #3636: Upgraded jQuery UI to 1.11.2
  • Updated the i18n data bundled with the framework to CLDR23.1 <http://cldr.unicode.org/index/downloads/cldr-23-1> this adds new locales and has many fixes and additional data for existing ones
Bugs fixed
  • #264: Fixed wrong timestamp precision value in postgres schema
  • #268: Fixed Active Record count error when some field name starting from 'count'
  • #788: createIndex is not using the recommended way to create unique indexes on Postgres
  • #1257: CFileValidator is no longer unsafe by default to prevent setting arbitrary values. Instead, when no file is uploaded attribute is set to null
  • #1635: CDateFormatter::format() with 'ZZZZZ' pattern used to return timezone in RFC 822 format, now returns in ISO 8601 format as it stated in CLDR
  • #2235: CPgsqlColumnSchema can't parse default value for numeric field
  • #2376: CHttpSession::regenerateID() now checks if session is started before regenerating session ID
  • #2378: CActiveRecord::tableName() in namespaced model returned fully qualified class name
  • #2519: CGridView and CListView fixed to be able handling special characters if history is enabled
  • #2594: CLogRouter::processLogs() now ensures to clear the Logger messages so nothing is logged twice when method is called multiple times
  • #2654: Allow CDbCommand to compose queries without 'from' clause
  • #2658: CBaseListView, CGridView, CListView: added note about $itemsCssClass and $pagerCssClass properties, they must not contain empty string, null or false values
  • #2969: CPgsqlSchema::addColumn() converts column type twice
  • #2741: Updated CHtml to add maxlength support to all HTML5 fields
  • #2753: Fixed CErrorHandler::errorAction ignored if error occurs while AJAX request
  • #2756: Fixed applying condition twice during Active Record relation lazy loading
  • #2770: Fixed CClientScript renders scripts with different HTML options inside same tag
  • #2778: Fixed throwing unnecessary exception in CFileValidator when validating MIME types for a file upload that failed
  • #2785: Use table name with schema in composeMultipleInsertCommand
  • #2836: Fixed rendering when try-catching widget Exception while 'captureOutput' is set to true
  • #2845: Fixed 1.1.14 regression affecting non-strict comparison in `CRangeValidator` validator
  • #2855: Fixed issue with Component::__call() and normal properties holding a Closure
  • #2862: Fixed array_merge caused renumbering of $data indexes in CHtml::radioButtonList()
  • #2864: Fixed CGridView ajax calls failing CSRF validation when ajaxType is set to POST
  • #2874: Fixed duplicate columns selection for HAS_MANY relation with composite primary key
  • #2876: Fixed single quotes in comments column causes syntax error in model code generated by Gii(klimov-paul)
  • #2884: Fixed problem with table alias in CActiveRecord that has been introduced in 1.1.14
  • #2887: Fixed CFormElement is missing __isset()
  • #2912: Add options parameter to CListView beforeAjaxUpdate
  • #2917: Restored ability to overwrite module alias via application config which was broken in 1.1.14
  • #2944: Fixed CDbCriteria fails to merge limit when it is 0
  • #2945: Fixed CUrlRule escapes dot (.) symbol on parsing
  • #2959: Fixed CFileValidator to encode file name, while composing error messages
  • #2963: CAssetManager::generatePath no longer uses basename for hasing
  • #2970: Fixed Active Record may join same relation twice on eager loading.
  • #3010: Problem with callables given as values to CDetailView. CDetailView now only allows annonymous functions to be called, all other values will be taken as value
  • #3064: Fixed problem with array to string converion in CDbMigration methods that accept array parameters
  • #3055: CAction::runWithParams() now returns consistent result even if called without parameters
  • #3087: Fixed crash on cookie validation when switching between enabling and disabling validation
  • #3113: Fixed problems with realpath(false) which can occur in combination with Yii::getPathOfAlias() when alias does not exist
  • #3134: Fixed the issue that query cache returns the same data for the same SQL but different query methods
  • #3144: It wasn't possible to use attributes with spaces in validation rules
  • #3179: Fixed a bug with CBreadcrumbs widget and homelink that did not use activeLinkTemplate property
  • #3206: Quote table names in CDbMessageSource::loadMessagesFromDb
  • #3233: Gii now allows base classes with absolute namespace as well, not only relative ones
  • #3242: Removed display:none on form hidden fields
  • #3283: Fixed CEmailValidator to validate empty value
  • #3288: Check if PHPUnit_Runner_Version exists before requiring
  • #3302: CActiveForm::error() fixed to respect 'hideErrorMessage' option on regular render
  • #3305: COciSchema column comment reading from another schema
  • #3321: Clear stat cache after rotating log files so later file size check is not cached
  • #3327: Gii did not generate empty directories properly
  • #3406: Fixed Object of class Imagick could not be converted to string
  • #3410: Fixed wrong translation parameter name in CPhpAuthManager::addItemChild()
  • #3569: CConsoleCommand::copyFiles() did not replace DIRECTORY_SEPARATOR correctly
  • #3582: make sure `build autoload` produces the same output on both Windows and Unix platforms
  • Fixed the bug that backslashes are not escaped by CDbCommandBuilder::buildSearchCondition()
  • Fixed URL parsing so it's now properly giving 404 for URLs like "http://example.com//////site/about/////"
  • Fixed an issue with CFilehelper and not accessable directories which resulted in endless loop
  • CSecurityManager encryption and string comparison were enhanced

Yii PHP Framework screenshot (481 pix)

Moderatie-faq Wijzig weergave

Reacties (14)

Ik heb even met yii gewerkt. het is een makkelijk framework maar idd het het hergebruiken van onderdelen is niet gemakkelijk. Maar er zit al veel ingebouwd dat je snel aan de slag kan.

persoonlijk vind ik laravel het beste php framework
Dan raad ik je aan om eens met Symfony2 te gaan werken. Ben geen fan van Laravel, waarom een framework bouwen op een framework? ;)
Laravel gebruikt veel van het Symfony 2 project, waardoor het gebaseerd is op proven technology. Dit betekent niet dat het een 'framework op een framework' is, maar een framework dat een deel van zijn core haalt uit bestaande Open Source projecten.
Want waarom het wiel steeds opnieuw uitvinden, als er goede bestaande componenten zijn? }:O
"Want waarom het wiel steeds opnieuw uitvinden, als er goede bestaande componenten zijn?"

Symfony doet alles wat Laravel kan maar naar mijn mening is het beter te beheren, makkerlijker te schalen, makkelijker te hergebruiken en makkelijker te testen (mocken van static calls is niet leuk!).
Ik sta ook helemaal achter laravel (gebaseerd op Symfony2)
Met name de mogelijkheden van de list & gridviews zijn magnifiek, ik heb dat bij geen ander framework gezien (al heb ook nooit echt gezocht).
Sinds ik ooit ben overgestapt op Yii heb ik weinig behoefte gehad om naar iets anders te kijken. Ik heb persoonlijk nooit problemen ondervinden qua hergebruik. En in Yii 2 is het alleen nog maar makkelijker geworden door het gebruik van namespaces en een goede dependecy injector.

Ik heb slechts kort naar laravel gekeken, maar vond het lastig starten door het ontbreken van een simpele applicatie template. Op die manier weet je nooit echt of je het goed doet, het blijft een gok. De template apps van Yii geven een mooie voorzet een geven je direct een beetje een goede indruk hoe je netjes je applicatie opzet.
Mooi om te zien dat er nog steeds aan Yii 1 doorontwikkeld wordt. We hebben een aantal projecten op Yii 1 draaien die je niet zomaar even omzet.
"Yii is een component based php-framework, met volgens de ontwikkelaars zeer goede prestaties, die het bijzonder geschikt maken voor het ontwikkelen van grootschalige webapplicaties."

"Wij van WC-eend"...

Ik vond een leuke blog post over iemand die gemigreerd was van Yii 1 naar Symfony2: http://weavora.com/blog/2...fony2-over-yii-framework/

Persoonlijk ben ik niet zo voor Yii, het is moeilijk om onderdelen te hergebruiken in tegenstelling tot Symfony.
Die blog post is uit begin 2013. Inmiddels is het bijna 2015 en is er Yii 2 : http://www.yiiframework.com/doc-2.0/guide-index.html

Vrijwel alle tekortkomingen / beperkingen die in die blog post beschreven worden zijn in Yii 2 onder handen genomen, zeker de moeite om hier eens (of nogmaals) naar te kijken.
Vaag dat ik hier een -1 voor krijg, ik geef toch echt aan waarom Yii naar mijn mening onder doet...
Je hebt hem niet van mij, maar misschien omdat je alleen de docs leest zonder de achtergrond te willen begrijpen en het dan uit zijn verband als "goed" argument gebruikt. En de opmerking dat het misschien leuk is voor de huis tuin en keuken phper is ook wel super arrogant.
Nee, het gaat mij om het feit dat er dingen zoals Post::find() en Yii::$request gedaan worden. Mocht je gaan testen, krijg je super veel dependencies die je allemaal op hele vieze manieren moet gaan mocken.

"de huis tuin en keuken phper" is de hobbyist, ik zie niet wat daar arrogant aan is. Als Henk thuis voor het eerst een php website maakt, hoe wil je dat dan noemen?
Als je je er eens echt in zou verdiepen dan zou je zien dat al die static calls allemaal gebruik maken van de Dependency Injector en die bied juist de mogelijkheid om volledig te bepalen hoe de dependencies liggen. Dus je argument slaat helemaal nergens op.

Ik weet niet wie Henk is, maar volgens mij doet dat hier niet ter zake.
Als jij blij bent met Symphony dan is dat mooi voor jou, serieus, ik gun het je. Maar doe niet neerbuigend tegen al het andere.
Neem voor de gein even aan dat de ontwikkelaars er van er iets langer dan jij over na hebben gedacht en dat er misschien wel meer achter zit dan je in eerste instantie ziet. Verdiep je er eens in en misschien leer je dan nog iets.
En ja, je hele betoog is zelfingenomen en arrogant. Als je dat niet ziet verdien je de -1 des te meer....
Dat is nou juist het punt. Stel ik wil iets unit-testen wat Post::find() gebruikt of Yii::$request, kan ik dit dus niet mocken en moet ik de Dependency Injector gaan gebruiken (of weg-mocken).

Je wilt niet aan de Dependency Injector (of Depedency Injection Container) vragen om dingen, je moet het gewoon lekker krijgen. Zeker in unit-tests is dit een voordeel, je wilt niet dependencies uitzoeken en ergens hoog in de boom weg-mocken, dan ben je de halve wereld aan het testen i.p.v. de "unit".

Wil je dat een bepaalde functie die een gebruiker ophaalt af weet van een object die BTW berekend omdat een object nodig is die hier van af weet? Lijkt me niet zo handig ;)

Dependency Injection is leuk als je er goed mee om gaat. Volgens mij ben ik helemaal niet arrogant bezig maar probeer ik het duidelijk uit te leggen.

Static calls wil je gebruiken op het moment dat je daadwerkelijk static information nodig hebt en anders niet.

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True