[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Непонятки с php mvc mysql
Няшка Няшная
Подскажите, нубу (т.е. мне)!

Как, взяв за основу вот эту статью о реализации MVC, сделать действие (метод) меняющимся? Т.е., чтоб была возможность вывода, например, новости ( example.com/news/123 ) или пользователя ( example.com/user/*логин юзера* ).
В статье методы строго определенного названия, например example.ru/contacts/feedback. А нужно, чтоб название "метода" бралось из базы.

Подскажите что можно (нужно) изменить в подобном коде!

Сразу попрошу - готовые фрейморки не предлагать. Есть интерес самой сделать и научиться! smile.gif
vagrand
Вы конечно няшная няшка, но читать всю статью ради того что бы понять как вам и что нужно сделать вряд ли кто-то станет.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Игорь_Vasinsky
vagrand
Золотые слова wink.gif
user posted image

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Няшка Няшная
Допустим! ;)

Тогда подскажите, как, на примере этого кода, реализовать возможность рпосмотра отдельных новостестей ( example.com/news/123 ) или данных о ользователях ( example.com/user/*логин* ).

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]


index.php
ini_set('display_errors', 1);
require_once 'core/model.php';
require_once 'core/view.php';
require_once 'core/controller.php';

require_once 'core/route.php';
Route::start(); // запускаем маршрутизатор


route.php
class Route
{
static function start()
{
// контроллер и действие по умолчанию
$controller_name = 'Main';
$action_name = 'index';

$routes = explode('/', $_SERVER['REQUEST_URI']);

// получаем имя контроллера
if ( !empty($routes[1]) )
{
$controller_name = $routes[1];
}

// получаем имя экшена
if ( !empty($routes[2]) )
{
$action_name = $routes[2];
}

// добавляем префиксы
$model_name = 'Model_'.$controller_name;
$controller_name = 'Controller_'.$controller_name;
$action_name = 'action_'.$action_name;

// подцепляем файл с классом модели (файла модели может и не быть)

$model_file = strtolower($model_name).'.php';
$model_path = "application/models/".$model_file;
if(file_exists($model_path))
{
include "application/models/".$model_file;
}

// подцепляем файл с классом контроллера
$controller_file = strtolower($controller_name).'.php';
$controller_path = "application/controllers/".$controller_file;
if(file_exists($controller_path))
{
include "application/controllers/".$controller_file;
}
else
{
Route::ErrorPage404();
}
$controller = new $controller_name;
$action = $action_name;

if(method_exists($controller, $action))
{
$controller->$action();
}
else
{
Route::ErrorPage404();
}

}


function ErrorPage404()
{
$host = 'http://'.$_SERVER['HTTP_HOST'].'/';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:'.$host.'404');
}
}


controller_main.php
class Controller_Main extends Controller
{
function action_index()
{
// example.com/main/index
echo 'Это главная страница контроллера main!';
}

function action_test()
{
// example.com/main/test
echo 'Это тестовая страница контроллера main!';
}

}


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.