Autocompletion in de view

Door Niels Kieviet, 3 jaar geleden, 12.026x bekeken

Beste PHP vrinden,

Ik kon vroeger altijd zo 'kribbig' worden om het feit dat je in de view geen code completion hebt. Gelukkig heb ik daar een tijdje geleden de oplossing voor gevonden, en ik wilde het jullie niet onthouden.

Stel je hebt de volgende controller: (dummy code)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

class ShopController extends Zend_Controller_Action {

    /**
     * Categorie overzicht
     */

    public function indexAction() {
        $tableCategory = new Application_Model_DbTable_Category;
        $category = $tableCategory->find($this->getRequest()->getParam('category_id'))->current();
        $this->view->articles = $category->getArticles();
    }
}


?>


Daarbij hoort de volgende view:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<div class="articles">
<?php if (count($this->articles) > 0): ?>
    <?php foreach ($this->articles as $article): ?>
    <div class="article">
        <div class="article-title"><?php echo $this->escape((string) $article) ?></div>
        <!-- enz -->
    </div>
    <?php endforeach; ?>
<?php endif; ?>
</div>


Nu zou het heel leuk zijn als je bij variabele $article autocompletion zou hebben. Stel je voor dat het Article object 50 methodes bevat. Je weet, zeker als je net in het project zit, niet precies meer welke functies er zijn er hoe ze heten. Elke keer wanneer je een functie moet hebben moet je terug naar je Article object file om te kijken welke functies er ook al weer op een Article object beschikbaar zijn.

Nu is daar een oplossing voor. Zie onderstaand stukje code: (regel 4)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<div class="articles">
<?php if (count($this->articles) > 0): ?>
    <?php foreach ($this->articles as $article): ?>
    <?php /* @var $article Application_Model_Article */ ?>
    <div class="article">
        <div class="article-title"><?php echo $this->escape((string) $article) ?></div>
        <!-- enz -->
    </div>
    <?php endforeach; ?>
<?php endif; ?>
</div>


Je geeft aan de hand van de tab @var aan dat variabele $article een Application_Model_Article object is. Je hebt nu gewoon autocompletion op je $article variabele.

Support:
Ik heb in de volgende editors getest:

- Eclipse
- Zend Studio
- Netbeans

Tot slot,

Het is een klein hulpmiddel om wat snelheid te winnen met programmeren, niet heel spectaculair maar ik wilde het jullie niet onthouden!

Veel succes ermee.

Niels

Gesponsorde koppelingen

Inhoudsopgave

  1. Geen tutorials aanwezig.

 

Er zijn 5 reacties op 'Autocompletion in de view'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Koen Hollander
Koen Hollander
3 jaar geleden
 
Mooi gemaakt.(ook al snap ik er helemaal niks van weet ik wel dat het handig is :)
- Raoul -
- Raoul -
3 jaar geleden
 
Niels, bedankt! Je wilt niet weten hoeveel je mij hier mee geholpen hebt.
Niels Kieviet
Niels Kieviet
3 jaar geleden
 
0 +1 -0 -1
Geen probleem Raoul! Ik zat even te twijfelen of ik hem moest plaatsen aangezien het een behoorlijk kleine tut is, maar ik dacht ach een kleine snippet geven kan geen kwaad ;-)
Daan l
Daan l
3 jaar geleden
 
0 +1 -0 -1
Even naast het feit dat het intellisense heet in plaats van autocompletion.

Als je een normale IDE gebruikt zoals PHPstorm (http://www.jetbrains.com/phpstorm/) werkt het allemaal nog even wat beter.

Viewmodels ->
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * Address
 */
class Address
{
    public $City;
    public $HouseNumber;
}

/**
 * Some viewmodel
 */
class SomeViewModel
{
    /* @var $Addresses Address[] */  <---- Defineer array met addresses
    public $Addresses;
}


View ->
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
/* @var $model SomeViewModel */

foreach ($model->Addresses AS $Address)
{
    echo $Address->City . ' ' . $Address->HouseNumber;  <--- zonder @var binnen de foreach en je hebt intellisense
}


Offtopic: Ik moet altijd weer even lachen hoe Zend het Mvc patroon geimplementeerd heeft. Blijkbaar hebben ze nog nooit gehoord van een parameter in de actie en gewoon een view terug geven in plaats deze te zetten in een controller die er magisch iets mee doet.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niels Kieviet
Niels Kieviet
3 jaar geleden
 
0 +1 -0 -1
Hoi Daan,

Quote:
Even naast het feit dat het intellisense heet in plaats van autocompletion.

Naar mijn weten betekend het gewoon hetzelfde? Alleen Microsoft noemt het intellisense ipv autocompletion.

Quote:
Als je een normale IDE gebruikt zoals PHPstorm (http://www.jetbrains.com/phpstorm/) werkt het allemaal nog even wat beter.

Wat is er niet normaal aan bijvoorbeeld Zend Studio, Netbeans of Eclipse ? ;-) Daarnaast, net wat beter werken vraag ik mijzelf af. Je moet nog steeds 2 regels gebruiken wil je het juiste resultaat behalen.

Niels

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Labels

PHP tutorial opties