Jump to content
php.lv forumi

Mvc


ritogy

Recommended Posts

Tātad nodomaju ķerties pie kaut kā nopitnāka, un sāku skatīties dažādas pamācības par mvc, to uzbūvi, darbību u.t.t.

 

Beidzot ķēros klāt, un sāku kaut ko pa mazam taisīt. Pagaidām pabeidzu tikai galveno klasi, caur kuru es pārvietošos pa lapā, un tā ielādēs klases un metodes, līdz moduļu ielādei netiku.

 

<?php

class Core
{
public function __construct()
{
   	$url = $_GET['url'];
   $url = rtrim($url, '/');
   	$url = explode('/', $url);

   	if(empty($url[0])){

       	require 'controllers/home.php';
       	$controller = new Home();
       	$controller->index();

   	}else{

       	if(!empty($url[0]) && !empty($url[1])){

           	$controller_name = 'Controllers/' . $url[0] . '.php';

           	if(file_exists($controller_name)){

               	require $controller_name;
               	$controller = new $url[0];
               	$controller->$url[1]();

           	}else{

               	echo 'Not found';

           	}

       	}else{

       	$controller_name = 'Controllers/' . $url[0] . '.php';

       	if(file_exists($controller_name)){

           	require $controller_name;
           	$controller = new $url[0];
           	$controller->index();

       	}else{

           	echo 'Not found';

       	}

       	}


   	}
}
}

 

Gribu zināt cik ši klase ir laba, un ko es tajā varētu uzlabot.

 

.htaccess fails, kuru pats nerakstīju, bet paņēmu gatavu no vienas pamācības

 

Options +FollowSymLinks -Indexes -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

 

Paldies.

Link to comment
Share on other sites

Neiesaku vispār pašam nodarboties ar MVC freimworka izveidi, bet gan pētīt/izmantot kādu gatavu. Augstākminētajam kodam, līdz sakarīgas arhitektūras freimworkam vēl tāls ceļš ejams.

 

Skaties gatavus variantus, tas ar ko pašlaik nodarbojies ir nelietderīgi izniekots laiks.

Link to comment
Share on other sites

Neiesaku vispār pašam nodarboties ar MVC freimworka izveidi, bet gan pētīt/izmantot kādu gatavu. Augstākminētajam kodam, līdz sakarīgas arhitektūras freimworkam vēl tāls ceļš ejams.

 

Skaties gatavus variantus, tas ar ko pašlaik nodarbojies ir nelietderīgi izniekots laiks.

 

 

Ieteikumi? Pagaidām esmu skatījies tikai Codeigniter.

Link to comment
Share on other sites

CodeIgniter uzbūve gan nav sakarīga, tas tā.

Paskaties kā ir veidota Kohana vai Fuel.

 

Bet kāpēc gan, mācību nolūkos, pašam «neuzburt» savu _in-house freimvorku_? Protams, īstos projektos to nevajadzētu izmantot, bet, ja ir lieks laiciņš, kāpēc gan nepaspēlēties un kaut ko foršu neuztaisīt? :)

Link to comment
Share on other sites

1. Abstrakcija, abstrakcija un vēlreiz abstrakcija:

šis:

require 'controllers/home.php';
$controller = new Home();
$controller->index();

šis:

require $controller_name;
$controller = new $url[0];
$controller->$url[1]();

un šis:

require $controller_name;
$controller = new $url[0];
$controller->index();

ir viens un tas pats, tam jābūt zem metodes, piemēram, Core::runController

 

2. Izmanto autoload, lai nebūtu manuāli jāraksta vienmēr require un turpmāk varētu izmantot arī lazy loading.

Edited by codez
Link to comment
Share on other sites

Es pamātā taisītu visu Core klasi ar statiskiem mainīgajiem un metodēm, jo nav vajadzīgas 2 Core klases instances. Tādā veidā tu jebkurā vietā varēsi papildus izsaukt Core::runController, tādā veidā radot HMVC paternu un tev nebūs jāglabā kaut kur papildus globāla Core klases instance.

Link to comment
Share on other sites

Vispār jau static klases arī var tīti labi testēt, jāpārvar tikai dažas neērtības.

Bet, ja unit testi tiešām ir vajadzīgi un tos grib veikt ar klases instancēm arī Core klasei, tad taisam Core klases funkcionalitāti ne statisku un pievienojam tai statiskas wrapper klases, kas izmanto Core klases singletonu.

Šeit ir jāizšķiras par labu vienai vai otrai lietai, vai nu vienkāršāka aplikācijas izstrāde, vai ērtāka Core testēšana ar unit testiem, vai abi, ja dara kā es teicu, bet tad Core klasei papildus jāraksta wrapper metodes.

Edited by codez
Link to comment
Share on other sites

  • 4 months later...

Es pamātā taisītu visu Core klasi ar statiskiem mainīgajiem un metodēm, jo nav vajadzīgas 2 Core klases instances. Tādā veidā tu jebkurā vietā varēsi papildus izsaukt Core::runController, tādā veidā radot HMVC paternu un tev nebūs jāglabā kaut kur papildus globāla Core klases instance.

 

Ar ko īsti statiski mainīgies un funkcijas atšķiras no globāliem mainīgajiem no funkcijam iekš namespace ?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...