Новый комментарий

[email protected] 25.12.2018 в 15:52

ок

ivashkevich 26.12.2018 в 00:31

=)

Dram 12.05.2019 в 12:52

Да что-ж такое то! Третий урок без домашки. Преподу тройку за лень!

ivashkevich 12.05.2019 в 13:10

Будет ещё домашка. Пока просто запоминай :)

Tina 23.06.2019 в 20:17

Вы уверены что пути правильные? Все сделала как написано, но не работает. Путь до проекта на сервере имяПроекта/www

ivashkevich 24.06.2019 в 02:52

За 2 года только у вас ошибка возникла. Что не работает-то?

Tina 25.06.2019 в 01:04

500 ошибка. Работаю mamp pro +vphpstorm

ivashkevich 25.06.2019 в 04:42

Разбирайтесь сами с другими серверами. Я сразу сказал, что поддержка будет только для OpenServer. Скорее всего, в вашем случае папка www должна называться public_html или htdocs, или как ещё она в mamp по умолчанию называется.

[email protected] 11.11.2020 в 21:10

у меня такая же тема, просто стал сокращать пути на папку или дополнять другую и всё хорошо.
<?php

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

$controller = new \MyProject\Controllers\MainController();

if (!empty($_GET['name'])) {
$controller->sayHello($_GET['name']);
} else {
$controller->main();
}

bratislavka21 30.07.2019 в 19:13

Привет, Артем, возникла проблема:
в папке myproject.loc находятся 2 папки (www и src), т.е. если переходить по адресу http://myproject.loc, хоть с GET-запросом, хоть без, можно увидеть лишь 2 этих каталога, ведь index-файла там нет, он находится в папке www. Где я что-то упустил? Это важно, т.к. в следующем уроке возникают те же проблемы. (Windows, Open Server).

ivashkevich 30.07.2019 в 19:25

Привет. Нужно настроить OpenServer в соответствии с этим уроком - https://php.zone/php-training-course/3

bratislavka21 30.07.2019 в 21:59

Спасибо,теперь все работает. Проблема была в настройках OpenServer, в автопоиске доменов. Пользователь Tina в комментариях выше, возможно, тоже имела в виду что-то подобное, хоть у нее и не Openserver.

studentDev 27.04.2020 в 11:45

Я по началу вообще с denwer работал, ну потом перешёл на OpenServer. Так как в denwer обновлять версию PHP это муторное дело...

Ysup 02.09.2020 в 16:45

Вуаля, сработала! Тож смотрю, там только 2 папки и нет файла index.php. Настроил Openserver и норм.

shrineofamana 24.09.2019 в 00:55

Скажите пожалуйста, а почему мы используем

if (!empty($_GET['name']))

вместо

if ($_GET['name'])

?

ivashkevich 24.09.2019 в 08:50

Потому что при обращении по несуществующему ключу напрямую будет возникать ошибка. Попробуй написать так, убрать поле из формы и отправить запрос.

shrineofamana 24.09.2019 в 12:45

Понял, спасибо.

ivashkevich 24.09.2019 в 19:43

Красава!

Lasto 03.10.2019 в 15:51

На рабочей машине(сервере) не работает use.

ivashkevich 03.10.2019 в 17:16

Что значит не работает?

Lasto 03.10.2019 в 18:30

после добавления данной строки
use MyProject\Models\Users\User;
http://autohit.pro/ страница не доступна, перекопировал все коды, все страниц, не пашит.

ivashkevich 04.10.2019 в 12:58

Давай текст ошибки

andreskrip 16.01.2020 в 20:08

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

А разве не нужно у функций, которые ничего не возвращают (main(), sayHello()) ставить тип возвращаемого значения void? Уроками ранее на этом в комментариях делался сильный акцент.

ivashkevich 18.01.2020 в 07:29

Да, это можно делать, но не обязательно. Хотя является на данный момент хорошей практикой.

OneMoreTime 18.02.2020 в 21:05

Можно было в index.php прописать

namespace MyProject\Controllers;

, чтобы писать при создании нового объекта

$controller = new MainController();

вместо

$controller = new \MyProject\Controllers\MainController(); 
ivashkevich 19.02.2020 в 04:52

И с чего это index.php будет в этом нэймспейсе? Он вообще по другому пути валяется.

OneMoreTime 19.02.2020 в 11:00

Да, написал не то, что хотел. Имелось в виду вот это:

use MyProject\Controllers\MainController;

а не namespace в начале класса, чтобы потом не писать длинное имя.

ivashkevich 19.02.2020 в 19:19

И всё же, он вообще в папке www лежит, а не в src\MyProject\Controllers\MainController

OneMoreTime 19.02.2020 в 22:27

Так что, нельзя таким образом использовать инструкцию use, чтобы задать короткое имя для использованного в index.php класса? Хотя тут класс контроллера использован всего один раз в коде, может в этом и нет особого смысла, интересна сама возможность этого в принципе. Ну и код работает, никаких ошибок, предупреждений я ни в шторме, ни в браузере при запуске не видел. Все корректно работает.

ivashkevich 20.02.2020 в 04:28

Что работает понятно, просто есть стандарты, которые говорят о том, что путь неймспейса должен соответствовать файловой структуре проекта.

OneMoreTime 20.02.2020 в 10:11

путь неймспейса должен соответствовать файловой структуре проекта

Так я же неймспейс вообще не пишу в индексе, а ссылаюсь на путь к классу контроллера с помощью use. Я же не пишу в индексе неймспейс для индекса.
Вот index.php:

<?php
use MyProject\Controllers\MainController;
spl_autoload_register(function (string $className) {
    require_once __DIR__ . '/../src/' . $className . '.php';
});

$controller = new MainController();
if (!empty($_GET['name'])) {
    $controller->sayHello($_GET['name']);
} else {
    $controller->main();
}

Я не пойму, чем это отличается от вот этой ситуации:

Либо же указать в начале файла о каком классе идёт речь, когда мы используем в коде только слово User. Делается это с помощью слова use после указания текущего неймспейса, но перед описанием класса.

<?php

namespace MyProject\Models\Articles;

use MyProject\Models\Users\User;

class Article
{
    private $title;
    private $text;
    private $author;

    public function __construct(string $title, string $text, User $author)
    {
        $this->title = $title;
        $this->text = $text;
        $this->author = $author;
    }

    public function getTitle(): string
    {
        return $this->title;
    }

    public function getText(): string
    {
        return $this->text;
    }

    public function getAuthor(): User
    {
        return $this->author;
    }
}
Теперь, когда мы будем использовать класс User, то автоматически будет использоваться класс из неймспейса MyProject\Models\Users\User.

Тут тоже используется use, чтобы не писать длинный путь к другому классу, который используется в данном. Use и namespace же не связаны тут. Namespace указывает на порстранство имен текущего класса, а use указывает на пространство имен другого использованного класса в текущем. Или я не прав?

ivashkevich 20.02.2020 в 12:31

Аа, сорян, я вас не понял) да, так конечно можно)

studentDev 27.04.2020 в 12:00

Я так понял, мы создали файл MainController и в нём создали класс - который является 'моделью', мы её описали, в дальнейшем мы передали в 'контролер', и уже с 'контролера' передали сформированный результат в 'представление'?
Если я конечно правильно понял.

ivashkevich 27.04.2020 в 20:01

В файле с контроллером создали модель? Что-то непохоже на правду :)

studentDev 28.04.2020 в 02:46

Я думал что класс 'Controller' и его описание это и есть модель (свойства и методы) :/
Можете подсказать пожалуйста что в данном контроллере послужило моделью?

ivashkevich 28.04.2020 в 06:20

Ничего. Контроллер это контроллер. До модели мы ещё не дошли.

studentDev 28.04.2020 в 07:02

Всё, теперь понял.

pixel 20.11.2020 в 13:37

Почему в конце строки ставятся (), это ведь не метод, а класс. Без этих скобочек так же корректно работает. Или это некий стандарт записи?

$controller = new \MyProject\Controllers\MainController();
ivashkevich 23.11.2020 в 17:24
pixel 23.11.2020 в 19:16

Благодарю за ссылку на стандарты

Yasuo 24.05.2021 в 14:41

Warning: require_once(C:\openserver\domains\myproject.loc\www/../src/MyProject/Controllers/MainController.php): failed to open stream: No such file or directory in C:\openserver\domains\myproject.loc\www\index.php on line 4

Fatal error: require_once(): Failed opening required 'C:\openserver\domains\myproject.loc\www/../src/MyProject/Controllers/MainController.php' (include_path='.') in C:\openserver\domains\myproject.loc\www\index.php on line 4

Ошибка, всё сделал как тут описано и смотрел в гитхабе (код такой же)

Yasuo 25.05.2021 в 18:48

Переписал всё, теперь заработало, ничего не понял, но рад, что работает)

ivashkevich 29.05.2021 в 21:54

Ну видимо была опечатка в неймспейсе или имени класса

[email protected] 26.06.2021 в 21:40

spl_autoload_register без str_replace)

ivashkevich 27.06.2021 в 05:59

Задача со звёздочкой, для тех кто юзает линукс)

[email protected] 20.04.2023 в 14:48

В фрагменте кода :
require_once DIR . '/../src/' . $className . '.php';
нет замены :
str_replace('\', '/', $className)

ivashkevich 22.06.2023 в 05:49

Если вы на unix, то да, такая замена действительно нужна!

aaseven 14.08.2023 в 22:54

в index на сайте 3 строка

require_once __DIR__ . '/../src/' . $className . '.php';

а на гите :

require_once __DIR__ . '/../src/' . str_replace('\\', '/', $className) . '.php';

пока не залез на гит - ничего не работало. Правильно ли я понимаю что обычно сервера не используют unix и проблемы такой скорее всего не будет, и это просто частная ошибка из-за того что я на маке?

ivashkevich 30.08.2023 в 13:50

Обычно сервера используют unix, поправил урок, спасибо!

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