Matic Posted August 12, 2013 Share Posted August 12, 2013 (edited) I have a question, no a rant even because there is absolutely no information about this topic. Sure I read a lot about templating engines and MVC frameworks already out there. But what if I am building a small php app and frameworks would be an overkill and template engines are just redundand for me... I want to make a nice organized app but so far my directory strucute is: models (backend, bussiness logic) and html, php mix (for displaying php results to the user). Regarding views, what the hell is is? Is this just a mixed php file with html to display output? What is a template? What is the difference? Is a template purely in html? How does a template structure even look like? I really want to separate php from html but so far I have a bunch of <?php tags inside html files... and it really looks nasty. Lets say I want to make a template or a proper view, or only one of the two, whatever is needed... Simply put: I want php in one place and html, css design in other... And in a really simple way, with nothing else but my own code. Templates, views? Edited August 12, 2013 by Matic Quote Link to comment Share on other sites More sharing options...
sKunKbad Posted August 12, 2013 Share Posted August 12, 2013 A view can be a template, but can also be a snippet of HTML where there is some or no PHP. The view is usually called with an include function, but after output buffering is started, and then output when desired by echoing the output buffer or just using ob_end_flush. What all this does is allow you to set variables that are used in the view, but at the same time keep the view (which tends to be mostly HTML) out of the controller or model. Views can be nested inside other views, and if you are doing this then the nested view is usually saved as a variable instead of being output. That variable is then inserted into the parent view, which is then output to the browser. Some templating systems make use of special delimiters that designate a variable. For instance, instead of using php in a view to insert a variable named $something, some templating systems would allow you to write {{ something }}. I like my framework to be as simple as possible, so I don't use a templating system. Hope this helps. Quote Link to comment Share on other sites More sharing options...
Matic Posted August 12, 2013 Author Share Posted August 12, 2013 (edited) But overall a template is just a mixture of html and php right? And a view is broader, its a set of variables, session variables or whatever and it includes templates at the bottom. Did I get this straight? PS is a view also used in a post-redirect-get pattern? The way I see it the view is a mediator between actual database input code in the back and it includes templates to present the output to the user Edited August 12, 2013 by Matic Quote Link to comment Share on other sites More sharing options...
AbraCadaver Posted August 12, 2013 Share Posted August 12, 2013 In MVC your Model would be DB and/or business logic stuff, the Controller would get data from the Model, load the View, pass vars to the view etc. For the most part the view is just a template, a mix of HTML and only PHP needed to display data. PHP is a template language. Quote Link to comment Share on other sites More sharing options...
sKunKbad Posted August 12, 2013 Share Posted August 12, 2013 There's only one difference between a template and a view, and that would be that a template is usually the parent of some nested views. A template is just another view though. It sounds like you need a clear understanding of MVC, and devs have opinions on how MVC is to implemented, so if I describe MVC to you then keep in mind that this is how I understand it. MVC = ---------- Request is handed to a controller. Controller decides what to do with request. Controller asks for data from Model. Model may process data, including data validation. Model may set view variables, or hand data back to controller which injects them into views. Views use data to build HTML HTML is output to the browser. Quote Link to comment Share on other sites More sharing options...
Matic Posted August 12, 2013 Author Share Posted August 12, 2013 What would be this structure I use for my project? <body> <?php if(!$_POST and $poskodbe != '0') { ?> <p>Presenetil<?php text($spol); ?> te je <?php text($monster_ime); ?> !</p> <form action='../igra/gozd.php' method='post'> <input type='submit' name='action' value='Napadi' /> ali <input type='submit' name='action' value='Pobegni' /> <input type='hidden' name='monster' value= '<?php text($monster_ime); ?>' /> </form> Would this be template or a view? Quote Link to comment Share on other sites More sharing options...
ignace Posted August 12, 2013 Share Posted August 12, 2013 (edited) A template and a view are the same thing. In MVC the View is the part of the application that displays the results of a user's action and the application's processing. How you make up that View is entirely up to you. MVC is an idea and thus not bound to any technical implementation's, the same applies to views. For example: // the file is the controller (binds model and view) if ($_POST) { // mail is part of our model mail('foo@bar.bat', $_POST['subject'], $_POST['message']); // thank-you.html is part of our views include 'thank-you.html'; exit; } // contact.html is part of our views include 'contact.html'; // all concerns have been separatedThis is an MVC implementation. Edited August 12, 2013 by ignace Quote Link to comment Share on other sites More sharing options...
Matic Posted August 12, 2013 Author Share Posted August 12, 2013 A template and a view are the same thing. In MVC the View is the part of the application that displays the results of a user's action and the application's processing. How you make up that View is entirely up to you. Hmmm so where do I put my variables that display data to user etc.. in my template? Quote Link to comment Share on other sites More sharing options...
sKunKbad Posted August 12, 2013 Share Posted August 12, 2013 I think to understand use of views, you should look at some of the basic frameworks, and how they use views: CodeIgniter: http://ellislab.com/codeigniter/user-guide/general/views.html Laravel: http://laravel.com/docs/responses#views Kohana: http://kohanaframework.org/3.0/guide/kohana/mvc/views Quote Link to comment Share on other sites More sharing options...
Matic Posted August 12, 2013 Author Share Posted August 12, 2013 A template and a view are the same thing. In MVC the View is the part of the application that displays the results of a user's action and the application's processing. How you make up that View is entirely up to you. MVC is an idea and thus not bound to any technical implementation's, the same applies to views. For example: // the file is the controller (binds model and view) if ($_POST) { // mail is part of our model mail('foo@bar.bat', $_POST['subject'], $_POST['message']); // thank-you.html is part of our views include 'thank-you.html'; exit; } // contact.html is part of our views include 'contact.html'; // all concerns have been separatedThis is an MVC implementation. I think I understand more clear now what is what! Can you confirm that this page I made is indeed a simple controller. My model redirected to this page and now on this page I handle all sort of variables and on the bottom I included the view/template: session_start(); require_once 'includes/save.php'; require_once 'includes/stats.php'; $igralec_ime = $_SESSION['username']; if (isset($_SESSION['monster_ime']) or isset($_SESSION['monster_curhp']) or isset($_SESSION['moznost']) or isset($_SESSION['poskodbe']) or isset($_SESSION['spol']) or isset($_SESSION['combat']) or isset($_SESSION['turns']) or isset($_SESSION['zmaga']) or isset($_SESSION['zguba']) or isset($_SESSION['cekini']) or isset($_SESSION['post']) ) { $monster_ime = $_SESSION['monster_ime']; $monster['curhp'] = $_SESSION['monster_curhp']; $moznost = $_SESSION['moznost']; $poskodbe = $_SESSION['poskodbe']; $spol = $_SESSION['spol']; $combat = $_SESSION['combat']; $turns = $_SESSION['turns']; $zmaga = $_SESSION['zmaga']; $zguba = $_SESSION['zguba']; $cekini = $_SESSION['cekini']; $_POST = $_SESSION['post']; if ($monster['curhp'] <=0 and isset($_SESSION['monster_curhp'])) { update_save($igralec_ime, 'gozd', ''); } else if (prikazi_stat('curhp', $igralec_ime) != 0) { update_save($igralec_ime, 'gozd', $monster_ime); } } else { $poskodbe = prikazi_stat('curhp', $igralec_ime); $moznost = 'Tvoje zdravje je resno ogroženo, vrni se domov!'; $monster_ime = prikazi_borba($igralec_ime); $spol = sprintf("SELECT spol FROM monsters WHERE ime = '%s'", mysql_real_escape_string($monster_ime)); $result = mysql_query($spol); list($spol) = mysql_fetch_row($result); if (prikazi_stat('curhp', $igralec_ime) <= 0) { update_save($igralec_ime, 'gozd', ''); } } include '../public/gozd.html'; Quote Link to comment Share on other sites More sharing options...
ignace Posted August 13, 2013 Share Posted August 13, 2013 (edited) Yes. It separates the 3 responsibilities. Though a controller should not execute queries as only your model should be capable to do this. Also your update_save function should receive it's data from the controller and not use $_POST or $_GET internally since only your controller knows about $_POST and $_GET. The controller should be a firewall of some sort, between the client and your controller HTTP exists, but the model should be agnostic of HTTP. HTTP CALLS { client }<---->{ controller}---->{ model } The advantage here is that you can change HTTP to for example CLI or SOAP or whatever without having to change the underlying model. Since $_POST, $_GET, $_COOKIE, $_SESSION are part of HTTP it's therefor that your model should be agnostic of these variables. My model redirected to this page A model should not issue redirects since redirect's are the responsibility of the controller. Edited August 13, 2013 by ignace Quote Link to comment Share on other sites More sharing options...
Matic Posted August 13, 2013 Author Share Posted August 13, 2013 (edited) Also your update_save function should receive it's data from the controller and not use $_POST or $_GET internally since only your controller knows about $_POST and $_GET. A model should not issue redirects since redirect's are the responsibility of the controller. 1. How else am I supposed to tell the controller and the view to only show information if the user didn't or did click post button on my form? 2. Model issued a redirect because it is wise to implement post-redirect-get pattern, without it my user could just click refresh endlesly and the database would have duplicate entries... Is there any way around this? Edited August 13, 2013 by Matic Quote Link to comment Share on other sites More sharing options...
ignace Posted August 13, 2013 Share Posted August 13, 2013 1. How else am I supposed to tell the controller and the view to only show information if the user didn't or did click post button on my form? You understood me wrong in your controller you can use this however you want, but not inside your update_save function. You can pass these like so: update_save($_POST['foo'], $_POST['bar']);If you need a redirect you just add it: update_save(..); header('Location: ..'); exit; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.