• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

prośba o ocenę CV - Junior PHP Developer

Object Storage Arubacloud
+1 głos
1,115 wizyt
pytanie zadane 16 lipca 2018 w PHP przez sapero Gaduła (4,100 p.)
edycja 17 lipca 2018 przez sapero

Hej, chce się przebranżowić jednak nie wiem jak powinno wyglądać dobre cv na stanowisko junior php developera.

W firmie gdzie chce złożyć cv wymagają znajomość obiektowego php i podstaw symfony, js, css.

Pomożecie? 

zrobiłem dwie wersje jedna krótka a druga z opisem projektów(nie wiem czy tak się opisuję projekty jak ja to zrobiłem).

krytka jak najbardziej wskazana:)

przykładowe kody z mojej aplikacji, żeby nie było że jestem zielony:

kod prymitywny wiem, proszę o wyrozumiałość:)

 

klasa odpowidająca za request formularza:

<?php
namespace App\Requests;

use Entity\Apps;
use App\Validations\AddFolderValidator;

class AddFolderRequest
{
    private $name;
    private $subId;
    private $visibility;
    private $folderDescription;

    private $appsEntity;
    private $folderValidator;
    public $feedback = [];
    public $errors = [];

    public function __construct($folderName, $subId, $visibility, $folderDescription)
    {
        $this->name = $folderName;
        $this->visibility = $visibility;
        $this->subId = $subId;
        $this->folderDescription = $folderDescription;
        $this->folderValidator = new AddFolderValidator($folderName);
        $this->appsEntity = new Apps();
    }

    public function createFolder()
    {
        $this->folderValidator->checkNameExist();
        $this->folderValidator->validFolderName($this->name);
        $this->mergeErrors();

        if (empty($this->errors)) {
            $this->appsEntity->createApp($this->name);
            $this->appsEntity->setSubId($this->name, $this->subId);
            $this->appsEntity->setDescription($this->name, $this->folderDescription);
            $this->appsEntity->setType($this->name, 'folder');
            $this->appsEntity->setUrl($this->name, 'apps/');
            $this->appsEntity->setDirIcon($this->name, 'folder-icon.png');
            $this->appsEntity->setVisibility($this->name, $this->visibility);
            $this->feedback[] = 'dodano nowy folder';
        }
    }

    public function mergeErrors()
    {
        $this->errors = array_merge($this->errors, $this->folderValidator->getErrors());
    }
}

serwis logowania:

<?php
namespace App\Services\Auth;

use Services\Auth\LoginValidationServices;
use App\Models\Session\UserSession;
use DateTime;
use Entity\Users;
use Symfony\Component\HttpFoundation\Session\Session;
use Interfaces\AlertsError;

class LoginServices implements AlertsError
{
    private $login;
    private $password;
    private $validatorServices;
    private $session;
    private $dateTime;
    private $userEntity;
    /**
     * All errors after validation, taken from ValidationService
     * @var array
     */
    private $errors = [];

    public function __construct($login, $password)
    {
        $this->login = $login;
        $this->password = $password;
        $this->dateTime = new DateTime();
        $this->userEntity = new Users();
        $this->session = new UserSession();
        $this->validatorServices = new LoginValidationServices($this->login, $this->password);
        $this->authUser();
    }

    /**
     * All errors after validation login and password
     * @return array
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * Check errors after validation and set authorization status for User
     * #
     * If after validation we don't have errors in array $errors, set authorization for User
     * Any error in array "$errors" set failed authorization
     * @return bool
     */
    private function authUser()
    {
        $this->mergeValidationServicesErrors();
        //auth user
        if (empty($this->errors)) {
            $this->setLoginDate();
            $this->setLoginIp();
            $this->session->setAuthStatus(true);
        } else {
            $this->session->setAuthStatus(false);
        }
        if (empty($this->errors)) {
            $this->loginSuccessful();
        }
    }

    private function mergeValidationServicesErrors()
    {
        $this->errors = array_merge($this->errors, $this->validatorServices->getErrorsAfterValidation());
        //$this->errors = array_merge($this->errors, $this->blockingServices->errors);
    }

    private function setLoginDate()
    {
        $loginTime = $this->dateTime->format('Y-m-d H:i:s');
        $this->userEntity->setLoginDate($this->login, $loginTime);
    }

    private function setLoginIp()
    {
        $userIp = $_SERVER['REMOTE_ADDR'];
        $this->userEntity->setLoginIp($this->login, $userIp);
    }

    public function loginSuccessful()
    {
        $session = new Session();
        $session->set('userLogin', $this->login);
        header("Location: " . APP_URL . "home");
    }
}

przykładowa walidacja:

<?php
namespace App\Validations;

use Entity\Apps;

class AppValidator
{
    private $minCountName = 4;
    private $maxCountName = 20;

    public $appsEntity;
    public $errors = [];

    public function __construct()
    {
        $this->appsEntity = new Apps();
    }

    public function validApp($name)
    {
        if ($name == '') {
            $this->errors[] = 'Nie podałeś nazwy';
        }
        if (mb_strlen($name) < $this->minCountName) {
            $this->errors[] = 'Nazwa powinien składać się przynajmniej z ' . $this->minCountName . ' znaków';
        }
        if (mb_strlen($name) > $this->maxCountName) {
            $this->errors[] = 'Nazwa powinien składać się maksymalnie z ' . $this->maxCountName . ' znaków';
        }
    }

    public function checkAppExist($name)
    {
        if ($this->appsEntity->findApp($name) !== false) {
            $this->errors[] = 'Nazwa jest zajęta';
        }
    }

    public function appNotExist($name)
    {
        if ($this->appsEntity->findApp($name) == false) {
            $this->errors[] = 'Nie ma takiej aplikacji lub już nie istnieje';
        }
    }
}

Proszę serdecznie o pomoc

komentarz 16 lipca 2018 przez Mariusz08 Maniak (62,300 p.)

Ten pierwszy plik to kontroler a nie request formularza

komentarz 16 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
Poza tym wstaw plik na jakiś normalny hosting, a nie jakiś darmowy download itp.
komentarz 16 lipca 2018 przez sapero Gaduła (4,100 p.)

@Mariusz08, ten plik to klasa wspierająca kontroller, wydzieliłem wszystkie klasy odpowiadające za request bo kontrolery były za duże. u mnie kontroler tylko sprawdza czy jest request i przekazuje dane do tej klasy i odbiera dane z tej klasy dla widoku. mam parę takich klas bo requestów do różnych zdarzeń jest dużo i kontroler posiadał za dużo logiki dlatego to wydzieliłem tak. 

komentarz 18 lipca 2018 przez Jake Obywatel (1,820 p.)
Jesteś pewien, że nie powinno być Cocoon tylko Coocon?

3 odpowiedzi

0 głosów
odpowiedź 16 lipca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Osobiście wybrałbym to pierwsze. Co więcej jeszcze bym je skrócił, konkretniej w sekcji doświadczeń opisał krótko każde. W moim odczuciu CV ma kogoś zainteresować, wpaść w oko, a widząc ścianę tekstu to się u mnie nie dzieje. Wręcz myślę sobie "matko, mam to wszystko czytać? przecież to takie nudne". Dla nas teraz to pół biedy, czytam jedno, ale jak jakiś rekruter ma takich 10 przed sobą to pewnie czuje różnicę :)

Gdy ktoś będzie bardzo zainteresowany szczegółami to zakładam, że raczej po prostu zaprosi Cię na rozmowę i zapyta bezpośrednio. Chyba że to co robiłeś jest publiczne, to bym podlinkował. Tak to myślę że patrząc na GitHuba ktoś sobie dużo wyciągnie o Tobie, więc zamiast tyle pisać zadbałbym, aby tam było coś sensownego. A jak bardzo chcesz to wszystko wypisać to zrobiłbym jakieś proste portfolio, stronę o sobie, czy coś tego typu, i tam to bardziej szczegółowo opisał i tylko podał linka.

Kodu trochę mało do oceny, ale widać że coś ogarniasz - jest OOP, są sensowne klasy. Więc na juniora ja bym próbował - nic Ci to nie szkodzi, a możesz sporo zyskać.

Aha, żeby było jasne: nie jestem oczywiście żadnym HRem, piszę tylko o moich odczuciach i moim zdaniu, nie muszę mieć ze wszystkim racji ;)
komentarz 16 lipca 2018 przez sapero Gaduła (4,100 p.)
dzięki za poświęcony czas:) skrócę to:)
komentarz 16 lipca 2018 przez sapero Gaduła (4,100 p.)

@Arkadiusz Waluk, a jeśli nie mam doświadczenia w php jest sens wpisywać sekcje "doświadczenie"?

komentarz 16 lipca 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ale masz rzeczy powiązane - opieka nad stronami internetowymi, grafika itp. Jakby to była budowa, czy coś tego pokroju, to może bym się zastanowił, ale takie coś wpisywałbym śmiało ;) Przy okazji pokazuje to też że coś robisz, a nie siedzisz w domu czy że nie chce Ci się pracować.
komentarz 16 lipca 2018 przez sapero Gaduła (4,100 p.)
no racja:)
0 głosów
odpowiedź 16 lipca 2018 przez sapero Gaduła (4,100 p.)
ktoś mógłby jeszcze się wypowiedzieć:)?
0 głosów
odpowiedź 16 lipca 2018 przez profesorek96 Szeryf (91,420 p.)
Moim zdaniem to pierwsze jest ok. Zwięzłe i na temat. Nikt nie musi szukać gdzie jest pierwszza strona gdzie druga. Bierze kartke do ręki patrzy ze coś pisze i od razu czyta i ma wszystko pod ręką i w dobrej kolejności. Edukacja na końcu a to co umiesz i czym możeszz sie pochwalić na początku.

Podobne pytania

0 głosów
1 odpowiedź 496 wizyt
–1 głos
1 odpowiedź 497 wizyt
pytanie zadane 16 grudnia 2021 w Rozwój zawodowy, nauka, praca przez roberto23 Początkujący (270 p.)
+2 głosów
8 odpowiedzi 6,215 wizyt

92,589 zapytań

141,439 odpowiedzi

319,692 komentarzy

61,974 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...