회원가입을 하게 되면 이메일로 인증메일을 보내게 된다.

하지만 클릭하게 되면 403에러가 나온다.

 

 

 

이렇게 말이다.

 

.env 파일 열어서 URL설정을 확인해본다.

아마 맞을 것이다.

 

난 이렇게 해결하였다.

 

config/app.php 파일을 열어서 운영서버 주소를 넣어주었다.

 

이렇게 해서 해결하였다..

이글은 라라벨(laravel) 프로젝트를 Git으로 배포하는 방법을 담고 있다.

AWS Lightsail Ubuntu-512MB-Seoul

NGINX : nginx version: nginx/1.10.3 (Ubuntu)

PHP : php7.3PHP 7.3.4-1+ubuntu16.04.1+deb.sury.org+3 (cli) (built: Apr 10 2019 10:50:34) ( NTS )

MySQL : mysql ysql  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper


root계정으로  ssh 접속한다.

모른다면 gogo

https://anko3899.tistory.com/185?category=785507

 


 

패키지 인덱스 업데이트

apt-get update

nginx 설치

apt-get install nginx

php7.3을 설치하기 위해 우분투를 업그레이해야함 

apt-get update && sudo apt-get upgrade

UTF-8 선택

Keep the local version currently installed 선택


*우분투 버전확인(참고사항)

cat /etc/issue

저장소를 추가 할 수 있도록 다음 패키지가 설치되어 있는지 확인

apt-get install software-properties-common

Ondrej의 저장소가 필요합니다.

add-apt-repository ppa:ondrej/php

패키지 목록 업데이트

apt-get update

그런 다음 PHP 7.3 및 기타 여러 패키지를 설치할 수 있음.

apt-get install php7.3 php7.3-xml php7.3-gd php7.3-opcache php 7.3-mbstring

*php버전확인(참고사항)

php -v

아파치 제거하기

위의 명령을 사용하여 PHP를 설치하면 기본적으로 Apache2가 설치됩니다. 

Apache2를 사용하지 않으려면이 명령을 사용하여 제거 할 수 있습니다.

apt-get purge apache2 apache2-utils apache2-bin apache2.2-common

 

MySQL설치

apt-get install mysql-server

*MySQL 버전확인(참고사항)

mysql --version

php패키지 설치

apt-get install php-mysql

이제 git ssh key를 설정하자

키를 생성하자

ssh-keygen

 

열어보면 세가지 파일이 있다.

ls ~/.ssh

 

생성된 ssh key는 아래로 찾아가서 키를 복사한다.

cat ~/.ssh/id_rsa.pub

 

키가 보이면 복사 한 후에 Github page > Settings > SSh keys 를 추가하자


laravel 이라는 디렉터리를 만들어주자

mkdir /var/www/laravel

git프로젝트를 다운받을 주소로 이동한다.

cd /var/www/laravel

내 프로젝트를 git clone를 해보자

git clone git@github.com:ddammo55/blog.git

아까 만들어준 키 비밀번호를 입력해준다.


다운받아졌는지 디렉터리를 확인해 보자

ls -al


/var/www/laravel/blog 에서 컴포저를 설치하자

curl -sS https://getcomposer.org/installer | php

 

전역 명령어로 사용

mv composer.phar /usr/local/bin/composer

 

컴포저 버전확인

composer --version

Do not run Composer as root/super user! See https://getcomposer.org/root for details

Composer version 1.8.5 2019-04-09 17:46:47

 

Do not run Composer as root/super 에러메시지 해결

 export COMPOSER_ALLOW_SUPERUSER=1

계속 사용

echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc

우분투 16.04 서버에 PHP7.2가 있었는데 문제가 해결 unzip설치

apt-get install zip unzip php-zip

composer 의존성 설치

composer install

라라벨 .env복사

cp .env.example .env

 

암호화 키를 만든다

php artisan key:generate

 

www 데이터 사용자에게 권한을 부여해야합니다. www-data는 Nginx가 응용 프로그램을 실행하기위한 기본 사용자

sudo chown www-data:www-data /var/www/laravel/blog/storage -R
chown www-data:www-data /var/www/laravel/blog/public -R

 

.env 환경설정

vi .env

mysql계정부분을 입력해주자 

DB_DATABASE = 

DB_USERNAME =

DB_PASSWORD =

:wq


mysql에 가서 데이터베이스를 만들어주자 .env DB_DATABASE 와 동일하게 만들어준다.

일단 mysql에 접속

mysql -uroot -p

패스워드 입력

 

접속 후 데이터베이스 만들기

CREATE DATABASE db1 default CHARACTER SET UTF8;

Query OK, 1 row affected (0.00 sec)

 

데이터베이스 목록 보기

show databases;

 

MySQL 빠져나오기

quit;

라라벨 마이그레이션 실행

php artisan migrate

Migration table created successfully.


새로 생성 된 Laravel 폴더를 사용하고 공용 폴더를 루트 폴더로 사용하려면 Nginx를 설치해야합니다.

 vi /etc/nginx/sites-available/default

 

참고 /etc/nginx/sites-available/default

server {
    listen 80;
    listen [::]:80;

    . . .

    root /var/www/laravel/blog/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    . . .
}

nginx 다시 시작

service nginx restart

브라우저로 내 홈페이지 주소로 접속해보자  짜잔~~


git연결을 위해 아래와 같이 설정하자(이름설정 : 아무거나 상관없음)

git config --global user.name "HelloFinger" 

 

깃에 가입한 이메일(자신의 계정)

git config --global user.email "ddammo55@naver.com"

 

현재 디렉터리를 Git로컬저장소라고 알려주는 명령어 

git init

Reinitialized existing Git repository in /var/www/laravel/blog/.git/

 

git 프로젝트에 변경사항을 다운받고 싶으면 

git pull

 2 files changed, 29 deletions(-) (2개의 파일을 지웠다고 나온다.)

 

 

이상으로 마치겠다. 오류가 나면 구글검색으로 해보길........

 

일단 자신의 aws Lightsail로 ssh 접속을 합니다.

 

root 계정의 비밀번호를 만듭니다.

sudo passwd root


sudo vi /etc/ssh/sshd_config

두가지 항목을 수정해준다.

(기존)

PermitRootLogin prohibit-password
PasswordAuthentication no

 

(변경)

PermitRootLogin yes
PasswordAuthentication yes

ssh 재시작

sudo service sshd restart

다시 터미널을 열어서 자신의 계정으로 접속해보자

ssh root@호스트명

 

맥에서 팅커콘솔이 안먹는다.

>>> 여기서 엔터를 치면 그냥 빠져나온다.

cd ~/.config/psysh/
vi config.php

아래의 소스를 입력바랄께

<?php
return [
        'usePcntl' => false,
];

:wq  저장후 나가기

reset
php artisan tinker

>>> App\User::create([
... 'name' => 'ddddd',
... 'email' => 'ddddd@ddd.com',
... 'password' => bcrypt('password'),
... )];

 

동영상은 이걸 보길 바람

https://www.youtube.com/watch?v=QFgEGNBY3FI

윈도우 환경에서 발렛을 이용하여 라라벨을 설치하는 방법을 정리하였다.

이해력이 남들과 달라서 이틀이나 고생했다.

 

1. 터미널(관리자권한)을 열어서 80번 포트에 바인딩이 되어있는지 확인한다.

$>netstat -ano


2. PHP를 비트 수에 맞게 다운로드 해준다.

https://windows.php.net/download/

 

PHP For Windows: Binaries and sources Releases

Binaries and sources Releases Select an option to direct access... VC15 x64 Non Thread Safe VC15 x64 Thread Safe VC15 x86 Non Thread Safe VC15 x86 Thread Safe VC15 x64 Non Thread Safe VC15 x64 Thread Safe VC15 x86 Non Thread Safe VC15 x86 Thread Safe VC14

windows.php.net

다운받은 파일은 예)c:\devel\php7.3.4 에 압축을 풀었다.

환경변수 등록을 해준다.(터미널에서 전역적으로 사용하기 위해서이다.)

 

php.ini-development 복사 후 붙여넣기 한다음 파일이름을 php.ini 파일로 저장시켜준다.

 

php.ini 파일을 에디터편집기로 열어준다.

php.ini 파일에서

extension_dir 부분을 php\ext 폴더를 지정해주자 안그러면 모듈을 불러오지 못해 에러가 난다.

date.timezone 를 아시아/서울로 설정해준다.

아래와 같이 사용할 모듈 주석을 해제해준다.

extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
extension=intl
;extension=imap
;extension=interbase
;extension=ldap
extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=shmop

; The MIBS data available in the PHP distribution must be installed.
; See http://www.php.net/manual/en/snmp.installation.php
;extension=snmp

extension=soap
;extension=sockets
;extension=sodium
;extension=sqlite3
;extension=tidy
extension=xmlrpc
;extension=xsl

터미널에서 php -m 입력하여 에러가 없어야한다.

php 폴더에서 i.php 파일을 만들고 저장한다.

<?php
phpinfo();
?>

php 내장 웹서버 구동

php -S localhost:8000


3. Composer 설치

https://getcomposer.org/download/

 

Composer

Download Composer Latest: v1.8.5 To quickly install Composer in the current directory, run the following script in your terminal. To automate the installation, use the guide on installing Composer programmatically. php -r "copy('https://getcomposer.org/ins

getcomposer.org

composer-setup.exe 로 컴포저를 php.exe 지정해서 설치해준다.

전역설정은 자동으로 되는 것 같다.


4. MariaDB 설치

https://downloads.mariadb.org/mariadb/

 

MariaDB - MariaDB

MariaDB 5.3 Series MariaDB 5.3 has subquery optimizations, join enhancements, group commit, dynamic columns, microsecond support and windows performance fixes. See "What is MariaDB 5.3" for an overview of what is in MariaDB 5.3. Windows, Linux, and Solaris

downloads.mariadb.org

*.msi 설치형을 받아주고 설치를 진행하자.


5. valet 패키지 설치

터미널 관리자권한으로 실행

composer global require cretueusebiu/valet-windows

설치과정 사진

%APPDATA%\Roaming\Composer\vendor\bin 경로로 가면 valet 명령어가 있다.

이경로를 시스템 환경변수에 등록해준다.

이제 Administrator 권한으로 터미널을 실행한 후에 다음 명령어로 valet 을 설치합니다.

valet install

에러가 난다면 대개 일반사용자로 터미널을 열어서 그런것이다. 꼭 관리자 권한으로 실행해주길 바란다.


6. .test 도메인으로 연결할 수 있도록 첫 번째 DNS 서버로 로컬 DNS설정을 해준다.

이것을 안해주면 valet laravel 설치를 해도 .test 로 되지않아요.


만약 php버전이 바뀌면 phpfpmservice.xml 파일로 들어가서 수정하면된다.

수정을 마치면

valet restart


7. Laravel Valet용 설치

터미널에서 입력

composer global require "laravel/installer"

8. 라라벨 프로젝트 만들기

유저경로에다가 프로젝트 만들기

laravel new blog

설치관정 완료사진


9. Park Path 설정

c:\users\user-name>valet park

valet park

하위 프로젝트는 모두 실행가능하다.

이제 브라우저를 열어서 [프로젝트명].test 를 입력하자. ex) blog.test

짜~~짠 성공하였다.


기본 도메인을 변경할 경우 (터미널은 관리자 권한으로 실행)

만약 .test를 .dev로 변경할 경우

valet domain dev

 

현재 도메인을 확인하려면 

valet domain

10. DB 테스트하기 

하이디SQL db접속에디터로 사용하여 db1 이름으로 데이터베이스를 생성해준다.

라라벨 blog 프로젝트에서 .env 파일에서 DB설정값을 넣어준다.

해당 프로젝트 디렉토리로 이동하여 마이그레이션을 해준다.

c:\users\user-name\blog>

php artisan migrate

db1에 기본적으로 생성되는 테이블이 생성된다.

 

이제 팅커콘솔로 user테이블에 데이터를 삽입해보자

php aritsan tinker

 

데이터가 잘 삽입되었다.


참고주소: https://blog.hashvel.com/posts/how-to-install-laravel-valet-on-windows-os/

 

How to Install Laravel Valet on Windows OS - Hashvel Blog

Install Valet in your windows system with this step by step guide. The tutorial walks you through questions like What is Laravel Valet? How to Install Valet? How to create Laravel project in Valet? It also has valet commands required to work with Laravel p

blog.hashvel.com

참고주소: https://www.lesstif.com/pages/viewpage.action?pageId=39126153

 

Windows 에서 Valet 으로 PHP 개발 환경 만들기

PHP 개발 환경 구성은 일반적으로 LAMP(Linux, Apache, MySQL, PHP) stack 이라는 말로 표현하는 경우가 많습니다.

www.lesstif.com

 

  • 컨트롤러 코드가 간결해진다.
  • 이벤트 처리 로직을 유연하게 확장하거나 축소할 수 있다.(여러 개의 이벤트 리스너)
  • 사용자에게 빠른 UI 응답을 제공한다.(무겁고 시간이 걸리는 일은 이벤트로 던져 다른 클래스에서 처리)


컨트롤러에 이벤트 던지기

app/Http/Controllers/ArticlesController.php

    public function store(\App\Http\Requests\ArticlesRequest $request)
    {

        $article = \App\User::find(1)->articles()->create($request->all());

        if(!$article){
            return back()->with('flash_message', '글이 저장되지 않았습니다.')->withInput();
        }

        dump('이벤트를 던집니다.');
        echo "<br>";
        event(new \App\Events\ArticleCreated($article));
        dump('이벤트를 던졌습니다.');
        echo "<br>";

        //return redirect(route('articles.index'))->with('flash_message', '작성하신 글이 저장되었습니다.');

    }

이벤트 레지스트리 채널 등록

app/Http/Providers/EventServiceProvider.php

    public function boot()
    {
        parent::boot();

        \Event::listen(
            \App\Events\ArticleCreated::class,
            \App\Listeners\ArticlesEventListener::class
        );
    }

listen() 첫번째 인자는 지정한 이벤트가 발생하면 두번째 인자의 클래스에게 처리를 위임한다라는 뜻이다.

 

위와 같이 등록한 후에 아래와 같이 입력하면  

php artisan event:generate

app/Events/ArticleCreated.php

app/Listeners/ArticlesEventListener.php

 2개의 파일이 생성된다.


이벤트 클래스 작성

app/Events/ArticleCreated.php

class ArticleCreated
{
    use InteractsWithSockets, SerializesModels;

    public $article;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(\App\Article $article)
    {
        $this->article = $article;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

이벤트 채널은 DTO(Data Transfer Object)다. 

다른 클래스가 DTO의 프로퍼티에 접근할 수 있게 public 로 선언하자.

__construct(\App\Article $article) 인자는 모델과 변수인 것 같다.


이벤트 리스너 클래스 작성

app/Listeners/ArticlesEventListener.php

<?php

namespace App\Listeners;

//use App\Events\article.created;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class ArticlesEventListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct(){
        //
    }

    /**
     * Handle the event.
     *
     * @param  article.created  $event
     * @return void
     */
    public function handle(\App\Events\ArticleCreated $event)
    {
        dump('이벤트를 받았습니다. 받은 데이터(상태)는 다음과 같습니다.');
        dump($event->article->toArray());
    }
}

결과 화면 창


실용적인 이벤트 시스템

포럼 글이 작성되면 관리자에게 메일을 보낸다고 가정하자

컨트롤러에서 기존 이벤트를 던지는 코드는 삭제하고 주석처리했던 return 구문은 살리자.

그리고 새로운 이벤트의 이름으로 작성해주자 ArticleEvent

event(new \App\Events\ArticlesEvent($article));

이벤트 레지스트리 채널 등록

app/Http/Providers/EventServiceProvider.php

 \App\Events\ArticlesEvent::class 로 수정해주자

    public function boot()
    {
        parent::boot();

        \Event::listen(
            \App\Events\ArticlesEvent::class,
            \App\Listeners\ArticlesEventListener::class
        );
    }

이벤트 채널과 리스너 뼈대 코드 한 번에 만들기

php artisan event:generate

이벤트 클래스 뼈대만 만들기

php artisan make:event ArticlesEvent

\App\Listeners\ArticlesEventListener.php 는 이미 있기 때문에 ArticlesEvent 클래스만 생성된다.


이벤트 소스 작성

app/Events/ArticlesEvent.php

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class ArticlesEvent
{
    use InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $article;

    public $action;

    public function __construct(\App\Article $article, $action = 'created')
    {
        $this->article = $article;
        $this->action = $action;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

이벤트 리스너 소스 작성

app/Listeners/ArticlesEventListener.php

<?php

namespace App\Listeners;

//use App\Events\article.created;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class ArticlesEventListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct(){
        //
    }

    /**
     * Handle the event.
     *
     * @param  article.created  $event
     * @return void
     */
    public function handle(\App\Events\ArticlesEvent $event)
    {
        if($event->action === 'created'){
            \Log::info(sprintf(
                '새로운 포럼 글이 등록되었습니다.: %s',
                $event->article->title
            ));
        }
    }
}

포럼에 새 글을 작성해보자

http://localhost:8000/articles/create

storage/logs/laravel.log 에 가보면 마지막줄에 기록이 되었다.


라라벨 내장 이벤트 채널

 

마이그레이션 및 모델

php artisan make:migration add_last_ligin_column_on_users_table --table=users

database/migrations/TIMESTAMP_addadd_last_ligin_column_on_users_table.php

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->timestamp('last_login')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_login');
        });
    }
php artisan migrate


app\User.php

class User extends Authenticatable
{
	protected $dates = ['last_login'];
}

이벤트 리스너

이벤트 레지스트리에 이벤트 채널과 리스너를 동록한다. 

사용자가 로그인하면 방출하는 라라벨 내장 이벤트는 Illuminate\Auth\Events\Login

이벤트를 소비할 APP\Listeners\UsersEventListener에 연결하자

    protected $listen = [
        \Illuminate\Auth\Events\Login::class => [
            \APP\Listeners\UsersEventListener::class
        ],
    ];

이벤트 채널 및 리스너 뼈대 코드 만들기

php artisan event:generate

app/Http/Listeners/UsersEventListener.php

    public function handle(Login $event)
    {
        $event->user->last_login = \Carbon\Carbon::now();
        return $event->user->save();
    }

로그인 창을 열어 로그인을 해보자

데이터가 제대로 입력이 되었다.

라우터 만들기

routes/web.php

Route::resource('articles', 'ArticlesController');

컨트롤러 뷰반환 작성

app/Http/Controllers/ArtcleController.php

    public function create()
    {
        return view('articles.create');
    }

전송 폼 만들기(view)

resources/views/create/index.blase.php

@extends('layouts.app')

@section('content')
<div class="container">
	<h1>새 포럼 글 쓰기</h1>
	<hr/>

	<form action="{{ route('articles.store') }}" method="POST">
		{!! csrf_field() !!}


		<div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
			<label for="title">제목</label>
			<input type="text" name="title" id="title" value="{{ old('title') }}" class="form-control"/>
			{!! $errors->first('title', '<span class="form-error">:message</span>') !!}
		</div>

		<div class="form-group {{ $errors->has('content') ? 'has-error' : '' }}">
			<label for="content">본문</label>
			<textarea name="content" id="content" rows="10" class="form-control">{{ old('content') }}</textarea>
			{!! $errors->first('content', '<span class="form-error">:message</span>') !!}
		</div>

		<div class="form-group">
			<button type="submit" class="btn btn-primary">
				저장하기
			</button>
		</div>
	</form>
</div>
@stop

localhost:8000/articles/create 열어 뷰를 확인한다.


ArticleController 데이터베이스 로직 추가

app/Http/Controllers/ArticlesController.php

    public function store(Request $request)
    {
        $rules = [
            'title' => ['required'],
            'content' => ['required', 'min:10'],
        ];

        $validator = \Validator::make($request->all(), $rules);

        if($validator->fails()){
            return back()->withErrors($validator)->withInput();
        }

        $article = \App\User::find(1)->articles()->create($request->all());

        if(!$article){
            return back()->with('flash_message', '글이 저장되지 않았습니다.')->withInput();
        }

        return redirect(route('articles.index'))->with('flash_message', '작성하신 글이 저장되었습니다.');

    }

이제 저장이 되는지 localhost:8000/articles/create 에서 확인해보자

 


플래시 메시지

resources/views/layouts/app.blade.php

   <!--생략-->
   </nav>

    @if(session()->has('flash_message'))
    <div class="alert alert-info" role="alert">
        {{ session('flash_message') }}
    </div>
    @endif
    <!--생략-->

글이 작성되었다고 메시지를 출력해준다.


오류 메시지 사용자화

유효성 검사에 실패하여 돌아온 페이지에서 영어로 된 오류 메시지가 표시된다. 전역 언어 설정을 한글로 바꾸자

config/app.php

'locale' => 'ko',

위와 같이해도 바뀌지가 않는다. 유효성 검사 오류를 표시하는 언어 파일이 없어서다.

 

app/Http/Controllers/ArticleController.php

$messages를 만들어주고 $validator 인자에 넣어준다.

        <!--생략-->
        $rules = [
            'title' => ['required'],
            'content' => ['required', 'min:10'],
        ];

        $messages = [
            'title.required' => '제목은 필수 입력 항목입니다.',
            'content.required' => '본문은 필수 입력 항목입니다.',
            'content.min' => '본은은 최소 :min 글자 이상이 필요합니다.',
        ];

        $validator = \Validator::make($request->all(), $rules, $messages);

        if($validator->fails()){
            return back()->withErrors($validator)->withInput();
        }
          <!--생략-->

오류사항이 있으면 메시지로 알려준다.

@extends('master')

@section('content')

<h1>작업지시 작성하기</h1>

<div class="ui stackable two column grid">

	<div class="column">

		<form class="ui form" method="POST" action="/works">
			@csrf
			<div class="field">
				<div class="ui selection dropdown">
					<input type="hidden" name="project_name" value="{{ old('project_name') }}">
					<i class="dropdown icon"></i>
					<div class="default text" style="color: black">프로젝트명</div>
					<div class="menu">
						@foreach ($project_lists as $project_list)
						<div class="item">{{$project_list->project_name }}</div>
						@endforeach
					</div>
				</div>
			</div>

			<div class="field">
				<div class="ui selection dropdown">
					<input type="hidden" name="project_code" value="{{ old('project_code') }}">
					<i class="dropdown icon"></i>
					<div class="default text" style="color: black">프로젝트코드</div>
					<div class="menu">
						@foreach ($project_lists as $project_list)
						<div class="item">{{$project_list->project_code }}</div>
						@endforeach
					</div>
				</div>
			</div>	

			<div class="field">
				<div class="ui selection dropdown">
					<input type="hidden" name="board_name" value="">
					<i class="dropdown icon"></i>
					<div class="default text" style="color: black">보드명</div>

					<div class="menu">
						@foreach($board_names as $board_name)
						<div class="item">{{ $board_name->boardname }}</div>
						@endforeach	
					</div>

				</div>
			</div>

			<div class="field">
				<input class="input {{ $errors->has('assy') ? 'is-danger' : '' }}" type="text" name="assy" value="{{ old('assy') }}" placeholder="ASS'Y명" >
			</div>	

			<div class="field">
				<input class="input {{ $errors->has('ea') ? 'is-danger' : '' }}" type="number" name="ea" value="{{ old('ea') }}" placeholder="장수">
			</div>

			<div class="field">
				<input class="input {{ $errors->has('set_set') ? 'is-danger' : '' }}" type="number" name="set_set" value="{{ old('set_set') }}" placeholder="편성">
			</div>

		   <?php $dd = date("Y-m-d")?>
          <div class="field">
           
            <input type="date" name="end_product_date" value="<?=$dd?>" placeholder="생산완료일">
          </div>
        
		
			<div class="field">
				<input class="input {{ $errors->has('memo') ? 'is-danger' : '' }}" type="text" name="memo" value="{{ old('memo') }}" placeholder="메모">
			</div>


			<div class="field">
				<button class="ui button" type="submit">작성완료</button>
			</div>
		</form>
			@if($errors->any())
			<div class="ui pink inverted segment">

				<ul>	
					@foreach ($errors->all() as $error)
					<li>{{$error}}</li>
					@endforeach
				</ul>
			</div>	
			@endif	
	</div>

</div>
@endsection

 

 


폼 리퀘스트 클래스를 이용해서 유효성 검사를 한다.(위와 다른 방법)

이 작업은 컨트롤러에서 소스를 빼내어 Requests\ArticlesRequest.php 로 대체한다는 개념이다. 

컨트롤러 소스가 간단해진다. 즉 컨트롤러에서 ArticlesRequest.php 를 인서트한다고 생각하자.

php artisan make:request ArticlesRequest

app/Http/Requests/ArticlesRequest.php 파일이 생성된다.

class ArticlesRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => ['required'],
            'content' => ['required', 'min:10'],
        ];
    }

    public function messages(){
        return [
            'required' => ':attribute 은 필수 입력 항목임.',
            'min' => ':attribute 은 최소 :min 글자 이상이 필요함.',
        ];
    }

    public function attributes(){
        return [
            'title' => '제목',
            'content' => '본문',
        ];
    }
}

 

app/Http/Controllers/ArticlesConteller.php

use App\Http\Requests\ArticlesRequest;

상단에 위와 같은 소스를 작성해야한다.

    public function store(ArticlesRequest $request)
    {


        $article = \App\User::find(1)->articles()->create($request->all());

        if(!$article){
            return back()->with('flash_message', '글이 저장되지 않았습니다.')->withInput();
        }

        return redirect(route('articles.index'))->with('flash_message', '작성하신 글이 저장되었습니다.');

    }


 

'라라벨 > 유효성검사' 카테고리의 다른 글

폼리퀘스트 유효성 검사 Form Requests  (0) 2019.05.25

composer란 의존성 관리도구이다.

composer를 통해서 필요한 PHP Package 를 install한다.

처음에 잘 이해가 안간다 핸드폰의 paly스토어를 생각해보자 앱을 설치하려고하면 paly스토어를 통해서 설치한다.  약간 그런개념???

 

1.아래의 코드를 composer.json 파일로 저장한다.

  저장한 파일은 D:\AutoSet9\public_html\test 폴더에다가 넣자 (autoset9기준)

{

    "require": {

        "dflydev/markdown": "1.0.3"

    }

} 

markdown으로 검색한 결과가 아래에 나열된다.

그중에서 사용하고자하는 packagist를 클릭하면 

상세정보가 나온다.

https://packagist.org/ 

 

상세정보창

dflydev/markdown아래에 보면

composer requlre dflydev/markdown  컴포져install이름이 있다. 그것을 복사하여

composer.json 파일에 넣는다. 그리고 버전을 입력한다.

  "dflydev/markdown": "1.0.3"

 

  "dflydev/markdown": "1.*"     //최신버전을 말함

그런다음 cmd창을 활성화 하고 D:\AutoSet9\public_html\test 경로로 들어가준다.

인스톨 명령어를 입력해준다.

 D:\AutoSet9\public_html\test> composer install      을 입력해준다.

그러면 인스톨이 시작되고 완료된다.

 

hhtest폴더에 가보면 새로운 폴더와 파일이 생성된다.

'라라벨' 카테고리의 다른 글

타임스템프 끄는 방법 (timestamps = false)  (0) 2019.05.13
CRUD  (0) 2019.05.07
데이터베이스 마이그레이션  (0) 2019.04.02
엘로퀀트ORM  (0) 2019.04.01
쿼리빌더  (0) 2019.03.31

+ Recent posts