Вопрос

У меня есть проблема, которую я не могу решить.

Я строю небольшой фреймворк (практика), а сейчас я создаю библиотеку Validator. все работает превосходно, за исключением случаев, когда я пытаюсь исправить " callback " править. Правило обратного вызова используется, когда разработчику необходимо использовать правило, которого нет в библиотеке Validator.

Вот как я это делаю.

В контроллере:

$this->validator->check('req|callback:test', 

У меня есть проблема, которую я не могу решить.

Я строю небольшой фреймворк (практика), а сейчас я создаю библиотеку Validator. все работает превосходно, за исключением случаев, когда я пытаюсь исправить " callback " править. Правило обратного вызова используется, когда разработчику необходимо использовать правило, которого нет в библиотеке Validator.

Вот как я это делаю.

В контроллере:

public function check($rules, $input, $fieldname='') {
    $rule = explode('|', $rules);
    foreach ($rule as $r) {
        $request = explode(":",$r,2);
        $method = array_shift($request);
        $parameter = $request;
        array_unshift($parameter,$input);   
        array_push($parameter,$fieldname);
        if (method_exists($this, $method)) {
            call_user_func_array(array($this,$method), $parameter);
        }
  }

protected function callback($input, $key, $fieldname='') {

}

Класс валидатора:

UserController::test();

Моя проблема в том, как я могу использовать " текущий " контроллер. Например, в этом случае мне нужно найти:

$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();

Я могу найти правильный метод в $ key, но есть ли простой способ выяснить, какой контроллер работает?

Я пытался использовать URL как:

<*>

Но это не сработало вообще ... Есть идеи?

POST['module_name'], 'Module Name');

Класс валидатора:

<*>

Моя проблема в том, как я могу использовать " текущий " контроллер. Например, в этом случае мне нужно найти:

<*>

Я могу найти правильный метод в $ key, но есть ли простой способ выяснить, какой контроллер работает?

Я пытался использовать URL как:

<*>

Но это не сработало вообще ... Есть идеи?

Это было полезно?

Решение

Несколько разных способов подойти к этому.

Во-первых, я предполагаю, что где-то у вас есть код, который превращает URI

example.com/foo

в имя класса контроллера

class FooController

Обычно это называется "маршрутизацией". Если это так, каким-то образом предоставьте свой класс / метод маршрутизатора валидатору и / или всей системе. Это позволит вам в любое время получить имя контроллера из URI.

Во-вторых, при создании экземпляра вашего валидатора дайте ему ссылку на объект контроллера для конкретного запроса. Тогда это просто простой вызов get_class_name или API отражения.

В-третьих, потребуйте, чтобы ваш контроллер передавался вместе с вашим вызовом метода check .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top