Как вызвать другую функцию из того же контроллера в приложении Laravel? - PullRequest
0 голосов
/ 08 ноября 2019

Я очень новичок в Laravel, и мне дали проект Laravel, где мне нужно добавить некоторые новые функции. Человек, который ранее работал над этим проектом, не оставил ни одного комментария в коде, и теперь я должен составить свои собственные сценарии о функциях. У меня есть контроллер, определенный с некоторыми функциями (панель инструментов, show_project, save_project и т. Д.), И в одной из моих функций мне нужно использовать результат вызова другой функции.

В конкретном примере вызов производится из «http://127.0.0.1:8000/username/project_slug"» - есть кнопка «Сохранить» и функция публикации, вызываемая по событию onClick . вывод, который мне нужен, обычно вызывается на "http://127.0.0.1:8000/username/project_slug/svg",, который возвращает представление.

Для лучшего понимания есть пример потока:
Пользователь хочет сохранить свой проект (диаграмму UML), но для того, чтобы иметь миниатюру, функцию, которая генерирует представление (SVG)будет вызван формат), и идея состоит в том, чтобы взять HTML-содержимое страницы, которое находится на «http://127.0.0.1:8000/username/project_slug/svg", и передать его другому API для создания изображения.

До сих пор я пытался использовать методы cURL , file_get_contents , file_get_html , render , но когда я возвращаю вывод, сервер просто продолжает ждатьи не показывает сообщений об ошибках.

//The both functions are in ProjectController.php

/**
 * A function, for saving the json file, where the whole of the diagram 
 * components are described. From the frontend we receive the project_id and  
 * the project_data(the json content).
 */
public function save_project(Request $request) {
        $input = $request->only(['project_id', 'project_data']);

        /*
          Here we need to call the other function, to render the HTML content
          and to pass it to the other API. Then we save the result with the
          other information.
        */

        /*
          What I've tried?
          $new_link = 'http://' . $_SERVER['HTTP_HOST'] . "/$username" 
                                              ."/$project_slug" . "/svg";
          $contents = file_get_contents($new_link);
          return $contents;
        */

        //In the same way with cURL.

        $project = Project::where('user_id',session('userid'))
                          ->where('id',$input['project_id'])->first();
        $project->project_data = json_encode($input['project_data']);
        if($project->save()) {
            return ["status"=>"saved"];
        }
        else {
            return ["status"=>"error"];
        }
    }

/**
 * A function, which takes the the Json content (project_data) from the 
 * database and passes it to the view, where the Json is transformed in HTML 
 * tags. 
 */
public function generate_svg(Request $request,$username,$project_slug) {
        if(session('username')!=$username) {
            return redirect("/");
        }

        $userid = session('userid');

        $project = Project::where([
            'user_id' => $userid,
            'slug' => $project_slug,
        ])->first();

        if(!is_null($project)) {
            return view('svg',compact('project'));        
        }
    }

Я читал о некоторых возможных способах, включая запрос Guzzle, но, возможно, я не правильно понял идею:

Если мне нужно сделать Жрать Запрос от моего контроллера к другой функции внутри моего контроллера, нужна ли мне конфигурация API?

Что я имею в виду? Пример: перед сохранением проекта пользователь находится по этому URL-адресу"http://127.0.0.1:8000/hristo/16test". InsidВ контроллере у меня в переменных сеанса есть токен, имя пользователя (hristo) и я могу получить имя_проекта (16test) из URL, но после передачи этого URL в функцию generate_svg нет никаких указаний наошибка или успех

Значит, мне не хватает какой-то информации о токене?

1 Ответ

0 голосов
/ 08 ноября 2019

Если вам просто нужен ответ другой функции, вы можете просто использовать

$response = $this->generate_svg($request, $username, $project_slug);

Если вам нужно использовать эту функцию с другого контроллера, вы можете использовать эту

app('App\Http\Controllers\UsernameController')->generate_svg($request, $username, $project_slug);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...