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. Je kunt ook een cookievrije versie van de website bezoeken met minder functionaliteit. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , reacties: 14, views: 3.621 •
Bron: Yii PHP Framework, submitter: BBrunekreeft

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.8 uitgebracht met de volgende aankondiging:

Yii PHP Framework 1.1.8 is released

We are very pleased to announce the immediate availability of Yii Framework version 1.1.8. In this release, we included more than 80 new features, enhancements and bug fixes.

For the complete list of changes in this release, please see the change log and important feature additions. And if you plan to upgrade from an older version to 1.1.8, refer to the upgrade instructions.

In the following, we briefly introduce some of the most exciting new features in this release. Thank you for your support!

Custom URL rule classes

In order to handle URLs that are more complicated than CUrlRule can handle (e.g. part of a URL depends on some data stored in a DB table), one can write custom URL rule classes and plug them into CUrlManager. Below we show the URL rule configuration that uses a custom URL rule class:
array(
    // a standard rule mapping '/login' to 'site/login', and so on
    '' => 'site/',
 
    // a custom rule to handle '/Manufacturer/Model'
    array(
        'class' => 'application.components.CarUrlRule',
        'connectionID' => 'db',
    ),
 
    // a standard rule to handle 'post/update' and so on
    '/' => '/',
),

The custom URL rule class extends from CBaseUrlRule and can be implemented like the following:
class CarUrlRule extends CBaseUrlRule
{
    public $connectionID = 'db';
 
    public function createUrl($manager,$route,$params,$ampersand)
    {
        if ($route==='car/index')
        {
            if (isset($params['manufacturer'], $params['model']))
                return $params['manufacturer'] . '/' . $params['model'];
            else if (isset($params['manufacturer']))
                return $params['manufacturer'];
        }
        return false;  // this rule does not apply
    }
 
    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
    {
        if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches))
        {
            // check $matches[1] and $matches[3] to see
            // if they match a manufacturer and a model in the database
            // If so, set $_GET['manufacturer'] and/or $_GET['model']
            // and return 'car/index'
        }
        return false;  // this rule does not apply
    }
}

Improved class autoloader

Yii provides a class autoloader that can include a class on demand. It can now play more nicely with other 3rd-party autoloaders by allowing them to be in front of or after it in the autoloader chain. Previously, the Yii autoloader must be at the end of the autoloader chain so it was triggered for both Yii core classes and external classes:
// By default autoloader is registered before the Yii autoloader
Yii::registerAutoloader($autoloader);
Now you can avoid it by passing true as a second parameter:
// When second parameter $append is true, autoloader is being added after the Yii autoloader
Yii::registerAutoloader($autoloader, true);
By default, Yii class autoloader relies on PHP include path to work. However, some shared hosting services may not allow setting PHP include path. If you encounter this problem, you can now solve it by using the following bootstrap code for your application:
require('path/to/yii.php');
// disable PHP include path
Yii::$enableIncludePath = false;
Yii::createWebApplication($config)->run();

Sending log messages to destinations in "real time"

Some console commands may run for a long period of time, and they often need to keep some log messages in persistent storage to track the progress. The Yii logging mechanism can now support such "real time" logging. To do so, call the following before the long running code:
// automatically send every new message to available log routes
Yii::getLogger()->autoFlush = 1;
// when sending a message to log routes, also notify them to dump the message
// into the corresponding persistent storage (e.g. DB, email)
Yii::getLogger()->autoDump = true;

Saving counters with AR

CActiveRecord has a new convenient method called saveCounters(). It is very similar to the existing CActiveRecord::updateCounters(). The main difference is that saveCounters() only works with the current AR object while updateCounters() applies to the whole DB table. The following is an example showing their differences:
$post = Post::model()->findByPk(1);
// increment the view count of this post by 1
$post->saveCounters(array('views'=>1));
// equivalent implementation
Post::model()->updateCounters(array('views'=>1), 'id=1');

Generating message files

When using the yiic message command to generate message files, do you often have to delete old message files and replace them with the newly generated ones? You now have an option to force the command to overwrite the old files with the newly generated ones. To do so, in the configuration file used by the command, add a new option: "overwrite" => true.

Creating URLs in console applications

We often use CUrlManager to create versatile URLs in Web applications. Sometimes, console applications also have similar needs. For example, a console command may need to build a sitemap that consists of URLs for a front end Web application. This is now made easier as we can call Yii::app()->createUrl() like we do in a Web application.

Clips got parameters and placeholders

Sometimes a code snippet repeats over and over again but doesn't worth moving into a separate view file. In this case you can use clips that are now accepting parameters which will replace placeholders in the clips:

beginClip('hello')?>

Hello, {username}!

endClip() ?> renderClip('hello',array( '{username}'=>'Qiang', ))?> renderClip('hello',array( '{username}'=>'Alex', ))?> renderClip('hello',array( '{username}'=>'Michael', ))?>

Reacties (14)

Mooi framework, helaas is de mult language niet echt optimaal.
Na een tijdje testen ben ik maar overgegaan naar ionizecms. een op CodeIgniter gedreven framework.

Yii zal wel wat rapper zijn omdat het caching niet geoptimaliseerd is en het wat logger is
Jeej, een aantal van mijn, kleine, fixes zitten erin :)

jekker, CI is volgens mij een van de langzaamste frameworks (zelfs langzamer dan ZF schijnt).
CodeIgniter is juist een van de snelste frameworks, het is ook gemaakt om snel en licht te zijn. :)
Ligt er dus maar net aan hoe je test en wat voor website je wil bouwen, wat voor hardware je hebt maar zeker ook of je er mee overweg kunt of niet, kan zijn dat Yii je helemaal niet ligt en je 10x sneller websites maakt met een (iets) trager framework.

Zo ontzettend veel verschil zit er ook weer niet tussen ;) Maargoed, frameworks zijn ontzettend moeilijk te vergelijken!

Zelf zweer ik bij Zend Framework na CI, Yii en Cake geprobeert te hebben ;) Voor mij persoonlijk voelt Zend Framework het meest volwassen aan ;) Maar schijnt dan weer niet een van de snelste te zijn, maar tot op heden nog niks van gemerkt!

[Reactie gewijzigd door Ventieldopje op 27 juni 2011 19:38]

Ik ben zelf een groot Kohana v3 gebruiker. Een mooi PHP5 (H)MVC framework. Erg fijn is de duidelijke modulaire file structuur. Ook goed uit te breiden met modules voor meer functionaliteit. En misschien is de ORM module wel het geweldigste van allemaal.
Zend is iets heel anders dan CI, Yii of Cake, is je dat ook opgevallen?
Mijn opmerking was dan ook met ceteris paribus bedoeld, en het ging over runtime performance, niet over developtijd. :)
En heb je al een site gemaakt waarbij ZF te langzaam bleek? Bij de ene test is ZF langzamer, bij de andere sneller. Gebruik wat je het meeste aanstaat, en waar je het snelste wat in kan bakken.
Kijk en vergelijk http://www.devshed.com/c/...works-Tested-For-Speed/2/

Redelijke recent artikel van 4 mei waarin ze zeven frameworks testen op snelheid met waaronder CodeIgniter, Kohana en YII
Hier wordt getest zonder Cache opties. Niet erg eerlijk gezien het verschil op een live server veel belangrijke is, dan het verschil op een ontwikkelserver.

In andere woorden: Wie draait er nou vrijwillig zonder Cache op een live server?
Ook is het verschil in Cache interessanter, gezien de verschillende frameworks allemaal een eigen implementatie hebben. En dat samen met de Cache opties van bijv. MySQL en de PHP engine. Dan wil ik het verschil nog wel is zien.

Maar zoals altijd, kies een framework waar jij het beste in programmeert!
Ik wil daar dan wel is benchmarks van zien.
Codeigniter en bijv. Kohana zijn volgens mij echt niet langzamer. :?
CI en Kohana zijn ook bijna het zelfde. Kohana was volgens mij in het leven geroepen omdat CI te lang op PHP4 bleef hangen.

Een gigantisch groot pluspunt voor CI is natuurlijk wel de zeer fijne documentatie.

[Reactie gewijzigd door DirkZzZ op 27 juni 2011 20:36]

CI en Kohana zijn zeer zeker niet bijna hetzelfde. Kohana is voor de 3.x tak helemaal opnieuw geschreven en het enige wat Kohana en CI nog gemeenschappelijk hebben is dat het een MVC gebaseerd PHP framework is.
Wat gelijk een beetje het probleem is van kohana, namelijk dat updaten niet bepaald makkelijk is. Een totaalpakket zoals CMS en webshop kun je niet overzetten zonder veel te herschrijven.

Zelf draai ik nog op kohana 2 en nog geen tijd kunnen vrij maken om de boel te herschrijven.

Op dit item kan niet meer gereageerd worden.



Populair:Apple iPhone 6Samsung Galaxy Note 4Assassin's Creed UnityFIFA 15Motorola Nexus 6Call of Duty: Advanced WarfareApple WatchWorld of Warcraft: Warlords of Draenor, PC (Windows)Microsoft Xbox One 500GBDesktops

© 1998 - 2014 Tweakers.net B.V. Tweakers is onderdeel van De Persgroep en partner van Computable, Autotrack en Carsom.nl Hosting door True

Beste nieuwssite en prijsvergelijker van het jaar 2013