Commit 702c998d authored by Александр Плохих's avatar Александр Плохих 🌔
Browse files

add controller and action

parent d050cc48
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -7,3 +7,5 @@ F
public/index.php,0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
_
/src/Repository/ReadFileLineByLineRepository.php,7/c/7c103dcd8c0314a8821f84f7886754511983a720
X
(src/Actions/ReadFileLineByLineAction.php,b/b/bb599184d4f741824c29e585018cdb8069747a80
 No newline at end of file
+3 −1
Original line number Diff line number Diff line
@@ -7,3 +7,5 @@ F
public/index.php,0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
_
/src/Repository/ReadFileLineByLineRepository.php,7/c/7c103dcd8c0314a8821f84f7886754511983a720
X
(src/Actions/ReadFileLineByLineAction.php,b/b/bb599184d4f741824c29e585018cdb8069747a80
 No newline at end of file
+29 −0
Original line number Diff line number Diff line
<?php

namespace App\Actions;

use Generator;

class ReadFileLineByLineAction
{
    /**
     * Принимает путь до файла,
     * проверяет, что файл существует и выводит пользователю построчный вывод используя yield
     * (файл можешь создать любой)
     *
     * @param string $filePath путь до файла
     * @return string|Generator  */
    public function act(string $filePath): Generator
    {
        if (!file_exists($filePath)) {
            throw new Exception("неверный путь");
        }

        $file = fopen($filePath, 'r');
        while (!feof($file)) {
            yield fgets($file);
        }

        fclose($file);
    }
}
+6 −4
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@

namespace App\Controller;

use App\Actions\ReadFileLineByLineAction;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use function App\Repository\readFileLineByLine;

class ReadFileLineByLineController extends AbstractController
{
@@ -16,11 +16,13 @@ class ReadFileLineByLineController extends AbstractController
     * @param string $filePath путь до файла
     * @return Response  */
    #[Route('/readbyline/{filePath}', name: 'app_read_file_line_by_line')]
    public function index(string $filePath) : Response
    {
    public function index(
        string $filePath,
        ReadFileLineByLineAction $action
    ) : Response {
        $file = "";
        try{
            foreach (readFileLineByLine($filePath) as $line) {
            foreach ($action->act($filePath) as $line) {
                $file .= $line;
            }
        } catch (\Exception $exception) {
+0 −26
Original line number Diff line number Diff line
<?php

namespace App\Repository;
use Exception;
use Generator;

/**
 * Принимает путь до файла,
 * проверяет, что файл существует и выводит пользователю построчный вывод используя yield
 *
 * @param string $filePath путь до файла
 * @return Generator
 * @throws Exception если казанного фала нет
 */
function readFileLineByLine(string $filePath): Generator
{
    if (!file_exists($filePath)){
        throw new Exception("неверный путь");
    }

    $file = fopen($filePath, 'r');
    while (!feof($file)){
        yield fgets($file);
    }
    fclose($file);
}