Чат Telegram
Группа ВКонтакте
Новый комментарий


sashatkachenko1993@gmail.com 21.09.2018 в 18:01

Добрый день в первой части урока выдает вместо
'abracadabra'
'train.com/public_html/abracadabra'

ivashkevich 22.09.2018 в 20:36

Привет, напишите мне в вк или телеграм.

SlipKnot 02.10.2018 в 08:12

src\MyProject\Controllers\MainController.php

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Main page!';
    }
    public function sayHello(string $name)
    {
        echo 'Hello, ' . $name . '!';
    }
    public function sayBye(string $name)
    {
        echo 'Bye, bye ' . $name;
    }
}

src\routes.php

<?php

return [
    '~^hello/(.*)$~'=> [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~'=> [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~'=>[\MyProject\Controllers\MainController::class, 'main'],
];

www\index.php

<?php

spl_autoload_register(function (string $className) {
    require_once __DIR__ . '/../src/' . $className . '.php';
});

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';

$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction) {
    preg_match($pattern, $route, $matches);
    if (!empty($matches)) {
        $isRouteFound = true;
        break;
    }
}
if (!$isRouteFound) {
    echo '!!!PAGE NOT FOUND!!!';
    return;
}
unset ($matches[0]);

$controllerName = $controllerAndAction[0]; // 0 => string 'MyProject\Controllers\MainController' (length=36)
$actionName = $controllerAndAction[1]; //1 => string 'sayHello' (length=8)
$controller = new $controllerName(); //object(MyProject\Controllers\MainController)[1]
$controller->$actionName(...$matches);
ivashkevich 02.10.2018 в 22:46

Хорошо

SBTesla 12.10.2018 в 11:41

файл MainController.php

namespace MyProject\Controllers;

class MainController {
     public function main()
     {
          echo 'Главная страница';
     }
     public function sayHello (string $name)
     {
          echo 'Привет' . $name;
     }
     public function sayBye(string $name)
     {
          echo 'Проваливай' . $name;
     }
}

файл routes.php

return ['~ ^Hello/(.*)$~'=>[\MyProject\Controllers\MainController::class, 'sayHello'],
      '~^$~'=>[MyProject\Controllers\MainController::class, 'main'],
      '~^bye/(.*)$~'=>[MyProject\Controllers\MainController::class, 'sayBye']
      ];

файл Index.php

spl_autoload_register(function (string $className) {
     require_once __DIR__ . '/../src/' . $className . '.php';
});

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';

$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction) {
     preg_match($pattern, $route,$matches);
     if (!empty($matches)) {
          $isRouteFound = true;
          break;
     }
}
if (!$isRouteFound) {
     echo 'Страница не найдена';
     return ;
}
unset($matches[0]);
$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];
$controller = new $controllerName();
$controller->$actionName(...$matches);
ivashkevich 13.10.2018 в 21:17

Отлично!

ArtemijeKA 17.10.2018 в 07:20

src/routes.php +

'~^bye/(.*)$~' => [\MVCExample\Controllers\MainController::class, 'sayBye'],

src/MVCExample/Controllers/MainController.php +

public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }

url +

http://php_book/mvc/www/bye/artem

Выхлоп =

Пока, artem

Спасибо.

ivashkevich 19.10.2018 в 00:15

А что у вас за url такой жуткий? Опять экспериментируете не по курсу?

AxLT 31.10.2018 в 22:25

routes.php

<?php
return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    ];

MainController.php

<?php
namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }
    public function sayHello(string $name)
    {
        echo ' Hello ' . $name;
    }
    public function sayBye(string $name)
    {
        echo 'Bye ' . $name;
    }
}
ivashkevich 01.11.2018 в 22:52

Супер!

AntonM99 06.11.2018 в 19:10

Пока что трудно переваривается информация, но вроде справляюсь

routes.php

<?php
return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main']

];

MainController.php

<?php
namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}
ivashkevich 08.11.2018 в 10:34

Отлично!

Todd 07.11.2018 в 01:01

MainController

namespace app\Controllers;

class MainController {

    public function main() {
        return 'main page';
    }

    public function sayHello(string $name) {
        return 'hi, ' . $name;
    }

    public function sayBye(string $name) {
        return 'Bye, ' . $name;
    }

}

routes

return [
    '~^hello/(.*)$~' => [\app\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~'   => [\app\Controllers\MainController::class, 'sayBye'],
    '~^$~'           => [\app\Controllers\MainController::class, 'main'],
];

index

spl_autoload_register(function (string $className) {
    require __DIR__ . '/' . $className . '.php';
});

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/routes.php';

$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction) {
    preg_match($pattern, $route, $matches);
    if (!empty($matches)) {
        $isRouteFound = true;
        break;
    }
}

if (!$isRouteFound) {
    echo 'not found page';
}

unset($matches[0]);

$controllerName = $controllerAndAction[0];
$controllerAction = $controllerAndAction[1];

$controller = new $controllerName();
echo $controller->$controllerAction(...$matches);
ivashkevich 08.11.2018 в 10:34

Супер!

demyanovpaul@yandex.ru 07.11.2018 в 11:02

Создайте еще один экшн в контроллере – sayBye(string $name), который будет выводить «Пока, $name». Добавьте для него роут /bye/$name и убедитесь, что всё работает.

<?php
//routes.php
return [
    '#^hello/(.*)$#' => [MyProject\Controllers\MainController::class, 'sayHello'],
    '#^bye/(.*)$#' => [MyProject\Controllers\MainController::class, 'sayBye'],
    '#^$#' => [MyProject\Controllers\MainController::class, 'main']
];

//MainController.php
namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}
ivashkevich 08.11.2018 в 10:35

Отлично!

bildep 18.11.2018 в 17:47

src\MyProject\Controllers\MainController.php

<?php
namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}

src\routes.php

<?php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
];
ivashkevich 19.11.2018 в 21:51

Отлично!

Ilon 21.11.2018 в 03:31

Правильно ли делать отдельный класс route, чтобы делать маршрутизацию или же сделать как Вы указали? Есть много примеров отдельного класса, и актуально ли это?

ivashkevich 22.11.2018 в 09:20

Да, можно делать отдельным классом, в котором будет логика парсинга и всё что только нужно. Здесь специально не стал выносить для простоты.

virtual2018 26.12.2018 в 09:34

MainController.php

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }

routes.php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye']
ivashkevich 26.12.2018 в 23:37

Хорошо

alepawka 02.01.2019 в 03:13
'~^bue/(.*)$~' => [\MyProject\Controllers\MainController::class,'sayBue'], //Добавил в routes.php
public function sayBue(string $name) // Добавил в MainController.php
        {
            echo "Пока, " . $name;
        }
ivashkevich 02.01.2019 в 21:04

Отлично!

landialog 06.01.2019 в 14:12

Метод sayBye в MainControoler.php

public function sayBye(string $name){echo 'Пока , '. $name;}

Код общий route.php
return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~'=>[\MyProject\Controllers\MainController::class, 'main'],
];
ivashkevich 06.01.2019 в 23:06

Не нужно лепить всё в одной строке. А так - норм.

Bogdan 07.01.2019 в 22:28

Создайте еще один экшн в контроллере – sayBye(string $name), который будет выводить «Пока, $name». Добавьте для него роут /bye/$name и убедитесь, что всё работает.

<?php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
];
<?php

namespace MyProject\Controllers;

class MainController
{
    public function main(): void
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}

МОзг поплыл после этого урока, надеюсь не я один такой...

$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];

$controller = new $controllerName();
$controller->$actionName(...$matches);

вот тут вообще полностью все взорвалось, без копи-паст тут не написать)

ivashkevich 07.01.2019 в 22:38

Всё норм

Bogdan 10.01.2019 в 14:08

Да, свежая голова дает о себе знать, потратил 3 часа но разобрался и все понял. Но есть 1 вопрос:

  • Почему мы все это написали в конце кода, а не к примеру в if (!empty($matches)), как ни как это вроде оптимизация кода и мы бы убрали в данном случае проверку на $isRouteFound.
    Спасибо

    $controllerName = $controllerAndAction[0];
    $controllerAction = $controllerAndAction[1]; 
    $controller = new $controllerName(); 
    echo $controller->$controllerAction(...$matches); 

    Мы бы даже могли просто убрать проверку и написать "Страница не найдена"

    foreach ($routes as $pattern => $controllerAndAction) {
    preg_match($pattern, $route, $matches); 
    if (!empty($matches)) {
        unset($matches[0]);     
        $controllerName = $controllerAndAction[0]; 
        $actionName = $controllerAndAction[1]; 
        $controller = new $controllerName(); 
        $controller->$actionName(...$matches); 
    
        break;
    }
    }
    echo 'Страница не найдена!';
ivashkevich 11.01.2019 в 11:08

Чтобы не городить потом весь код внутри if'а. Если потом появятся ещё условия, нужно будет их внутри этого if'а добавлять. И так оно будет разростаться и усложняться, как снежный ком. Нашли роут - выполняем код дальше, не нашли - падаем. Прочитайте про цикломатическую сложность.

Bogdan 10.01.2019 в 14:23

Урок хороший, спасибо

Bugaga159 02.02.2019 в 22:28

MainController.php

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет ' . $name;
    }

    public function sayBye( string $name)
    {
        echo 'Пока, ' . $name;
    }
}

routes.php

<?php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
];

Делаем запрос:
http://myproject.loc/bye/andrey
Получаем : Пока, andrey

ivashkevich 03.02.2019 в 23:59

Отлично!

cap 26.02.2019 в 23:50
//MainController.php

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет , ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}

//routes.php

<?php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
]
//index.php - не меняется, если я правильно понял
ivashkevich 19.03.2019 в 23:13

Отлично

CarfikDK 18.03.2019 в 19:47

Спасибо за урок!
routes.php

<?php

return [
    '~hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~bye/(.*)$~' =>[\MyProject\Controllers\MainController::class, 'sayBye'],
];

MainController.php

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Это главная страница проэкта';
    }

    public function sayHello($name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye($name)
    {
        echo 'Пока, ' . $name;
    }
}
ivashkevich 19.03.2019 в 23:13

Отлично

Evgeny 19.03.2019 в 00:53

route.php


<?php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
];

MainController.php


<?php

namespace MyProject\Controllers;

class MainController
{
    public function main(): void
    {
        echo 'Главная страница.';
    }

    public function sayHello(string $name): void
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name): void
    {
        echo 'Пока, ' . $name;
    }
}

index.php


<?php

spl_autoload_register(function (string $classname) {
    require_once __DIR__ . '/../src/' . $classname . '.php';
});

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';

$isRouteFound = false;
foreach ($routes as $pattern => $controllerAnsAction) {
    preg_match($pattern, $route, $matches);
    if (!empty($matches)) {
        $isRouteFound = true;
        break;
    }
}

if (!$isRouteFound) {
    echo 'Страница не найдена.';
    return;
}

unset($matches[0]);

$controllerName = $controllerAnsAction[0];
$actionName = $controllerAnsAction[1];

$controller = new $controllerName;
$controller->$actionName(...$matches);
ivashkevich 19.03.2019 в 23:14

Отлично

arhipow@mail.ru 02.04.2019 в 14:02
return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
];

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

     public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}
ivashkevich 03.04.2019 в 05:08

Отлично

babls2332@gmail.com 02.04.2019 в 17:47
public function sayBye(string $name){
    echo 'Пока, '. $name;
}

Роут:

'~^bye/(.*)$~' => [\Controllers\MainController::class, 'sayBye'],
ivashkevich 03.04.2019 в 05:09

Отлично

Boodoo 13.04.2019 в 14:53

MainController.php

<?php
    namespace MyProject\Controllers;

    class MainController
    {
        public function main()
        {
            echo 'Главная страница.';
        }
        public function sayHello(string $name)
        {
            echo 'Привет ' . $name . '.';
        }
        public function sayBye(string $name)
        {
            echo 'Пока ' . $name . '.';
        }
    }

routes.php

<?php
    return [
        '#^hello/(.+)$#' => [\MyProject\Controllers\MainController::class, 'sayHello'],
        '#^bye/(.+)$#' => [\MyProject\Controllers\MainController::class, 'sayBye'],
        '#^$#' => [\MyProject\Controllers\MainController::class, 'main']
    ];
ivashkevich 13.04.2019 в 15:27

Отлично

polvanovv 25.04.2019 в 15:15
return [
    '~^hello/(.*)$~' => [\Myproject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~'   => [\Myproject\Controllers\MainController::class, 'sayBye'],
    '~^$~'           => [\Myproject\Controllers\MainController::class, 'main'],
];

public  function sayBye(string $name)
    {
        echo 'Good bye, ' . $name;
    }
ivashkevich 25.04.2019 в 15:17

Отлично

Dram 12.05.2019 в 15:44
  1. routes.php
    <?php
    return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, ' sayBye'],
    ];
  2. MainController.php
<?php
namespace MyProject\Controllers;
class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}
  1. Вроде бы в индекс пхп не надо ничего добавлять. Но пока я получаю ошибку

    Fatal error: Uncaught Error: Call to undefined method MyProject\Controllers\MainController:: sayBye() in C:\OSPanel\domains\localhost\index.php on line 32
    ( ! ) Error: Call to undefined method MyProject\Controllers\MainController:: sayBye() in C:\OSPanel\domains\localhost\index.php on line 32

ругается на строку - $controller->$actionName(...$matches);

пока комменты не смотрю, пытаюсь понять что не так, ведь главная и адрес http://localhost/hello/username отрабатывают как нужно.

ivashkevich 12.05.2019 в 23:04

А точно ли у вас файл с контроллером сохранен?

lMaxl 24.05.2019 в 14:58

Доброго дня!

Создайте в директории www файл .htaccess
...
Откроем в браузере адрес http://myproject.loc/abracadabra.

И вижу: Object not found! The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
Всё работает только при обращении непосредственно в папку www: http://myproject.loc/www/
Если открыть корень сайта видно: Index of / и директории сайта.
???

ivashkevich 26.05.2019 в 12:45

Приветствую. Настройте OpenServer по этому уроку.

ashfedor 13.06.2019 в 11:46

src\MyProject\Controllers\MainController.php

<?php
/**
контроллер главной страницы
 */

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }
    public function sayHello(string $name)
    {
        echo 'Привет ' . $name;
    }
    public function sayBye(string $name)
    {
        echo 'Пока ' . $name;
    }

}

код routes.php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
];
ivashkevich 13.06.2019 в 19:47

Отлично!

rpash151 25.06.2019 в 22:49
return [
    '~^hello/(.*)$~' => [\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\Controllers\MainController::class, 'sayBye'],
];
<?php

function myAutoLoader(string $className)
{
    //require_once __DIR__ . '/Src/' . $className . '.php';
    require_once __DIR__ . '/../src/' . str_replace('\\', '/', $className) . '.php';
}

spl_autoload_register('myAutoLoader');

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';
$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction)
{
    preg_match($pattern,$route,$matches);
    if(!empty($matches))
    {
        $isRouteFound=true;
        break;
    }
}

if (!$isRouteFound) {
    echo 'Страница не найдена!';
    return;
}

unset($matches[0]);

var_dump($controllerAndAction);
var_dump($matches);

$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];

$controller = new $controllerName();
$controller->$actionName(...$matches);
<?php

namespace Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }
    public function sayBye(string $name)
    {
        echo 'До новых встреч, '.$name;
    }
}
ivashkevich 27.06.2019 в 19:09

Отлично!

Invo 07.07.2019 в 14:50

Возможно кто то решил не с апачем, а с nginx работать (как я):

Тогда для подобного нужно следующее:

  • Файл конфига будет таким:

    server {
    index index.php;
    server_name blog.dev;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/blog.dev/www;
    
    location / {
        try_files $uri $uri/ /?route=$route;
    }
    
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    }

Так же нужно в /etc/nginx/nginx.conf, в разделе http добавить мапу:

 map $uri $route {
     default '';
     '~^/(.*)' $1;
    }

Вдруг кому будет полезно )

ivashkevich 07.07.2019 в 18:03

Отлично!

Moskva 09.07.2019 в 14:12

MainController.php

<?php

namespace MyProject\Controllers;

class MainController                    //Публичные методы контроллера ещё называются action-ами (от англ. action - действие).
{
    public function main(){
        echo 'Главная страница';
    }

    public function sayHello(string $name){
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name){
        echo 'Пока, ' . $name;
    }
}

Routes.php

<?php

return [
  '~^bye/(.*)$~' => [\MyProject\controllers\MainController::class, 'sayBye'],
  '~^hello/(.*)$~' => [\MyProject\controllers\MainController::class, 'sayHello'],
  '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
];
ivashkevich 09.07.2019 в 19:01

Отлично!

Danya 10.07.2019 в 12:26

"Для начала давайте сделаем по-простому – с помощью регулярки научимся понимать, что текущий адрес: http://myproject.loc/hello/ , ГДЕ - вообще любая строка. "
В строке "ГДЕ - вообще любая строка" - где что , не совсем понятно, может пропустили слово?

ivashkevich 12.07.2019 в 05:29

Спасибо, исправил

Iliusha99 19.07.2019 в 22:58
<?php

return [
    '~^hello/(.*)$~' => [Controllers\MainController::class, 'sayHello'],
    '~^$~' => [Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [Controllers\MainController::class, 'sayBye']
];

===================================

<?php

namespace Controllers;

class MainController
{

    public function main()
    {
        echo '<h1>Главная страница</h1>';
    }

    public function sayHello(string $name)
    {
        echo '<h1>Привет, ' . $name .'</h1>';
    }

    public function sayBye(string $name)
    {
        echo '<h1>Пока,'. $name .'</h1>';
    }

}
ivashkevich 20.07.2019 в 14:41

Отлично!

Metey 20.07.2019 в 17:18
вернулся назад и вспомнил про эту ДЗ

<?php

namespace MyProject\Controllers;

use MyProject\View\View;

class MainController
{
    private $view;

    public function __construct()
    {
        $this->view = new View(__DIR__ . '/../../../templates');
    }

    public function main()
    {
        $articles = [
            ['name' => 'Статья 1', 'text' => 'Текст статьи 1'],
            ['name' => 'Статья 2', 'text' => 'Текст статьи 2'],

        ];

        $this->view->renderHtml('main/main.php', ['articles' => $articles]);
    }

    public function sayHello(string $name)
    {
        $this->view->renderHtml('main/hello.php', ['name' => $name, 'title' => 'Страница приветствия']);
    }

    public function sayBye(string $name)
    {
        $this->view->renderHtml('main/bye.php', ['name' => $name]);
    }
}

bye.php

<?php include __DIR__ . '/../header.php'; ?>
Пока, <?= $name ?>!!!
<?php include __DIR__ . '/../footer.php'; ?>
ivashkevich 21.07.2019 в 05:15

Отлично

Reechniy 31.07.2019 в 07:21
routers.php

<?php

return [
    '~^hello/(.*)$~'=>[\MyProject\Controllers\MainController::class, 'sayHello' ],
    '~^$~'=> [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~'=>[\MyProject\Controllers\MainController::class, 'sayBye'],
];

MainController.php

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' .$name;
    }
}

index.php

Без изменений
ivashkevich 31.07.2019 в 07:26

Супер!

artemship 01.08.2019 в 15:06

Спасибо за урок, вроде разобрался!

routes.php:

<?php

return [
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
];

MainController.php:

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }
}
ivashkevich 01.08.2019 в 20:34

Отлично

Blook 07.08.2019 в 23:04

Метод

    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name;
    }

Роут

'#^bye/(.*)$#' => [\MyProject\Controllers\MainController::class, 'sayBye'],
ivashkevich 08.08.2019 в 16:07

Отлично

fosfat 30.08.2019 в 00:34

А зачем вот эта приписка ::class в \MyProject\Controllers\MainController::class ?

Непонятна ее целесообразность, ведь можно же и просто в кавычки взять '\MyProject\Controllers\MainController' и ничего не поменяется.

Нашел в документации только это, но ясности все-равно не вносит

ivashkevich 30.08.2019 в 04:44

Преимущество в том, что можно по имени класса щёлкнуть мышкой и он сразу откроется. Ну и если его переименовывать, то здесь IDE автоматом тоже все поменяет.

fosfat 30.08.2019 в 21:15

А в какой вкладке это настраивается? Потому что у меня в phpstorm по клику мышки класс не открывается и при переименовании автоматически не меняется.

ivashkevich 31.08.2019 в 05:05

Ctrl+клик мышкой. Переименовывать надо через меню refactor

Pro100Bah 05.09.2019 в 16:12

MainController.php

namespace MyProject\Controllers;        //Our Controller

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет ' . $name;
    }

    public function sayBye(string $name)            //Homework 13.2
    {
        echo 'Пакедова, дружище ' . $name;
    }
}

routes.php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye']          // homework13.2
];

index.php оставляем идентичным уроку, так так сделали все для работы.
При переходе http://myproject.loc/bye/Serega все работает))

ivashkevich 05.09.2019 в 19:46

Отлично

vtolstov 20.09.2019 в 11:10

все. разобрался ))

ivashkevich 21.09.2019 в 07:21

Супер)

XXX 29.09.2019 в 14:53

MainController.php

 public function sayBye(string $name)
    {
        echo 'Bye, ' . $name . '!';
    }

routes.php

'~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye']
ivashkevich 30.09.2019 в 00:30

Отлично

prinzplanloser0514@gmail.com 05.10.2019 в 18:03

Контроллер

<?php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayBye(string $name){
        echo "Пока,$name";
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name;
    }
}

Индекс

<?php

spl_autoload_register(function (string $className) {
    require_once __DIR__ . '/../src/' . str_replace('\\', '/', $className) . '.php';
});

$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/../src/routes.php';

$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction) {
    preg_match($pattern, $route, $matches);
    if (!empty($matches)) {
        $isRouteFound = true;
        break;
    }
}

if (!$isRouteFound) {
    echo 'Страница не найдена!';
    return;
}

unset($matches[0]);

var_dump($controllerAndAction);
var_dump($matches);

$controllerName = $controllerAndAction[0];
var_dump($controllerName);
$actionName = $controllerAndAction[1];
var_dump($actionName);
$controller = new $controllerName();
var_dump($controller);
$controller->$actionName(...$matches);

Роут

<?php

return [
    '/hello\/(.*)$/' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^\s*$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '/buy\/(.*)$/' => [\MyProject\Controllers\MainController::class, 'sayBye'],
];
ivashkevich 05.10.2019 в 19:41

Отлично

prinzplanloser0514@gmail.com 05.10.2019 в 18:46

Вроде понятно,а вроде и не очень) Думаю после модели и представления будет общая картина понятнее)

ivashkevich 05.10.2019 в 19:41

А что именно непонятно? Лучше сейчас спрашивай

prinzplanloser0514@gmail.com 05.10.2019 в 21:05

Да принцип работы и сейчас и дальше понятен,я не представляю,как это реализовывать с 0). И ещё,в одном из следующих уроков будет момент с

public function sayHello(string $name)
    {
       $this->view->renderHtml('main/hello.php',['name'=>$name,'title'=>'Страница приветствия']);
    }

Мы получается обращаемся к обьекту,который создали в конструкторе мейн контроллера и вызываем метод этого объекта,я правильно понял? Я в этих хитросплетениях немного запутался,получается мы в одном месте создали класс(представление),создали из этого класса внутри другого класса обьект и вызвали его метод.

ivashkevich 05.10.2019 в 21:36

Всё верно. С нуля понятно что не смог бы, для того и учишься, это нормально.

dliashchenko 17.10.2019 в 21:40

routes.php

<?php
return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
];

MainController.php

<?php
namespace MyProject\Controllers;

class MainController
{

    public function main()
    {
        echo "Главная страница";
    }
    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name . '!';
    }
    public function sayBye(string $name)
    {
        echo 'Пока, ' . $name . '!';
    }
}
ivashkevich 18.10.2019 в 08:59

Отлично

H3licoptero 13.11.2019 в 14:52

routes.php

return [
    '~^hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
    '~^$~' => [\MyProject\Controllers\MainController::class, 'main'],
    '~^bye/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayBye']
];

MainController.php

namespace MyProject\Controllers;

class MainController
{
    public function main()
    {
        echo 'Главная страница';
    }

    public function sayHello(string $name)
    {
        echo 'Привет, ' . $name . '!';
    }

    public function sayBye(string $name) {
        echo 'Пока, ' . $name . '!';
    }
}
ivashkevich 13.11.2019 в 17:12

Отлично

Логические задачи с собеседований