01 Dec 2019
|
생활코딩
PHP
1. 숫자와 문자
1-1. 숫자
<?php
echo 4/2; # echo: 출력
?>
<?php
var_dump(6.1); # var_dump: 데이터 타입 확인 => float(6.1)
?>
1-2. 문자
- 따옴표로 묶어줄 것. 따옴표를 사용하지 않을 경우 php에서 상수라는 다른 데이터 타입으로 인식하며 에러가 발생함
Parse error: syntax error, unexpected ‘world’ (T_STRING), expecting ‘,’ or ‘;’ in C:\Bitnami\wampstack-7.3.11-0\apache2\htdocs\number_string\string.php on line 2
<?php
echo 'hello world';
?>
<?php
echo var_dump(1234);
echo var_dump("1234");
?>
<!-- 문자 결합 연산자 . -->
<?php
echo "hello"." "."world";
?>
<!-- 따옴표 안에서 따옴표(인용부호) 사용 -->
<!-- 1. 작은 따옴표 사용 -->
<?php
echo '그는 "안녕하세요" 라고 말했다';
?>
<!-- 2. escaping - 역슬래쉬(\) 사용 -->
<?php
echo "그는 \"안녕하세요?\"라고 말했다";
?>
2. 변수와 상수
2-1. 변수
- 변수(variable): 변하지 않는 값.
- 변수 선언 시
$
를 사용
echo
대신 print
사용 가능
<html>
<body>
<?php
$a=1;
echo $a+1; #2
echo "<br />";
$a=2;
print $a+1; #3 print == echo
?>
</body>
</html>
<html>
<body>
<?php
$first = "coding";
echo $first." everybody";
?>
</body>
</html>
2-2. 변수 사용 이유?
변수를 통해 코드의 재활용성 향상시킬 수 있음. 따라서 코드를 효율적으로 작성할 수 있음.
<html>
<body>
<?php
echo 100+10;
echo '<br />';
echo (100+10)/10;
echo '<br />';
echo ((100+10)/10)-10;
echo '<br />';
echo (((100+10)/10)-10)*10;
echo '<br />';
?>
</body>
</html>
<html>
<body>
<?php
$a = 100;
$a = $a + 10;
print $a.'<br />';
$a = $a / 10;
print $a.'<br />';
$a = $a - 10;
print $a.'<br />';
$a = $a * 10 ;
print $a.'<br />';
?>
</body>
</html>
2-3. 상수
- 상수(constant): 변하지 않는 값
- 상수 선언시
define
사용. 첫번째 인자로 상수, 두번째 인자로 상수값 입력
- 선언된 상수를 재선언할 경우 에러 발생
Notice: Constant TITLE already defined in C:\Bitnami\wampstack-7.3.11-0\apache2\htdocs\variable\variable8.php on line 6
<html>
<body>
<?php
define('TITLE', 'PHP Tutorial');
echo TITLE;
// define('TITLE', 'JAVA Tutorial');
?>
</body>
</html>
2-4. 변수의 데이터 타입 검사 및 변경
gettype
: 데이터 타입 검사
settype
: 데이터 타입 변경
var_dump
는 데이터 타입 검사 및 출력을 강제하므로 활용도가 낮음
<html>
<body>
<?php
$a = 100;
echo var_dump($a); #int(100)
echo gettype($a); #integer
settype($a, 'double'); #double: 실수를 의미
echo '<br />';
echo gettype($a); #double
?>
</body>
</html>
2-5. 가변변수
- 가변변수(variable variables). 변수의 이름을 가변적으로 변수로 변경 할 수 있게 함.
<html>
<body>
<?php
$title = 'subject';
$$title = 'PHP tutorial';
echo $title;
echo $subject;
?>
</body>
</html>
3. 비교
==
, !=
, ===
, >
, >=
등이 있음.
===
: 데이터 뿐만 아니라 데이터 타입까지 비교할 경우 사용
<html>
<body>
<?php
echo('<br />');
echo "1==2 : ";
var_dump(1==2);
echo('<br />');
echo "1==1 : ";
var_dump(1==1);
echo('<br />');
echo '"one"=="two" : ';
var_dump("one"=="two");
echo('<br />');
echo '"two"=="two" : ';
var_dump("two"=="two");
echo('<br />');
?>
</body>
</html>
<!--결과 -->
1==2 : bool(false)
1==1 : bool(true)
"one"=="two" : bool(false)
"two"=="two" : bool(true)
<html>
<body>
<?php
var_dump(10>=20); #false
var_dump(1=='1'); #true
var_dump(1==='1'); #false
?>
</html>
01 Dec 2019
|
생활코딩
PHP
1. Windows 에서 PHP 설치하기
- W APM: Window Apach PHP MySQL
- Bitnami를 통해 W APM 설치 쉽게 가능
- httpd.conf 파일을 열어보면 DocumentRoot를 확인할 수 있음
- DocumentRoot “C:/Bitnami/wampstack-7.1.26-0/apache2/htdocs”
2. Windows에서 PHP 설정하기
2-1. 설정이란
Configuration. PHP가 동작하는 기본적인 작동방법을 변경하는 것으로, php.ini 파일를 통해서 변경 사항을 반영할 수 있다. 설정을 변경 한 후에는 웹서버를 리로드(reload) 혹은 재시작(restart) 해야 한다.
2-2. 에러설정
에러는 개발이나 오류를 파악하는데 중요한 수단이지만, 에러가 실서버 환경에서 그대로 노출되는 것은 바람직하지 못하다. 아래는 실서비스와 개발환경에서의 권장 설정 방법이다.
C:\BitNami\wampstack-5.4.20-0\php\php.ini
2-3. 운영
display_errors = Off
display_startup_errors = Off
error_reporting= E_ALL
log_errors = On
2-4. 개발
display_errors = On
display_startup_errors = On
error_reporting = -1
log_errors = On
php.ini: PHP에 대한 기본적인 설정을 저장한 파일
- 개발 환경의 경우, php.ini-development 파일을 php.ini로 수정
- 배포 환경의 경우, php.ini_production 파일을 php.ini로 수정
설정 변경 후, Bitnami 웹 서버를 다시 켜 줄 것.
3. 나의 첫번째 PHP 어플리케이션
<?php
echo "Hello world";
?>
- /firstapp/helloworld2.php
<?php> <?>
: PHP Interpreter/Engine은 해당 기호안에 있는 내용만 php로 해석함
<html>
<body>
echo "Hello world";
<?php
echo "Hello world";
?>
</body>
</html>
-
그림 설명
서버측 언어를 사용하는 이유
- HTTP: 웹 브라우저와 웹 서버가 서로 데이터를 주고 받기 위한 통신 규약
- CGI: 웹서버와 서버 사이드 스크립트가 서로 데이터를 주고 받기 위한 통신 규약
웹브라우저가 요청한 페이지(자원)이 HTML이 아닌 경우 웹 서버는 처리가 불가능함. 따라서 처리 가능한 적합한 언어의 엔진을 호출하여 사용자가 요청한 파일의 처리를 위임함. PHP, PYTHON 등이 파일을 읽어서 각각의 언어(코드)를 해석한 다음 그 결과를 웹서버에 돌려줌. (CGI에 의해 약속된 방식에 따라)
추가로, 서버사이드 스크립트는 경우에 따라 데이터베이스에 접근하여 데이터를 HTML 문서로 변경한 다음 웹서버로 데이터를 전달함.
01 Dec 2019
|
PHP
Laravel
1. Routes
Django의 urls.py처럼 url을 정하여 View와 연동시키는 설정을 하는 영역. Routes\web.php에서 코드 입력
1.1 Routes\web.php
Route
: 클래스 명
::
: static method를 의미함
- 첫번째 파라미터로 url 주소를 입력, 두번째 파라미터로 closure function또는 controller 등을 입력할 수 있음.
view()
를 return시키거나, text를 return하는 것도 가능함.
404 Error가 발생할 경우, php artisan serve
를 terminal에서 실행 시켜 접속하자
<?php
Route::get('/', function () {
return view('welcome');
});
Route::get('/welcome', function () {
return "Hi You";
});
Route::get('/admin/post', function() {
return "Admin is here";
});
1.2 variable routing
url 주소를 입력하는 첫번째 파라미터에 variable routing
으로 쓸 변수를 {}
로 묶어준 다음 변수를 두번째 파라미터 함수의 인자로 넘겨주면 variable routing
설정이 가능함.
두번째 예제처럼 variable routing
을 여러개 설정할 수 도 있음.
Route::get('/post/{id}', function($id) {
return "This is post number ".$id;
});
Route::get('/post/{id}/{name}', function($id, $name) {
return "This is post number ".$id . " ". $name;
});
1.3 naming
지정한 url에 대하여 naming 설정도 가능함. Route
클래스의 두번째 파라미터로 array()
메서드를 사용. naming 명으로 해당 url 호출 가능
- 첫번째 파라미터:
as=> naming 명
- 두번째 파라미터: closure 함수 입력
Route::get('admin/posts/example', array('as'=>'admin.home', function() {
$url = route('admin.home');
return "This url is". $url;
}));
php artisan route:list
: 프로젝트의 route list를 반환함
$ php artisan route:list
+--------+----------+---------------------+------------+---------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+---------------------+------------+---------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | about | | Closure | web |
| | GET|HEAD | admin/posts/example | admin.home | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | contact | | Closure | web |
| | GET|HEAD | post/{id}/{name} | | Closure | web |
+--------+----------+---------------------+------------+---------+--------------+
2. Controller
Django의 views.py의 역할을 함. Database에서 데이터를 갖고와 Template으로 넘겨줄 수 있음. App\Http\Controllers
디렉토리 내에서 파일 생성 & 코드 입력
2.1 PostsController.php
Laravel에서는 Terminal을 통해 손쉽게 controller를 생성할 수 있음.
php artisan make:controller controller 이름
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
//
}
CRUD 및 기본적인 로직이 담겨있는 resource가 저장된 controller를 불러와 만들 수도 있음.
php artisan make:controller --resource PostsController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
2.2 Routing controller
Route 클래스의 두번째 파라미터로 생성한 controller를 입력함으로써 controller를 routing 할 수 있음.
@
를 활용하여 controller의 특정 메서드 호출 가능
variable routing
을 설정하여 데이터를 넘겨주는 것 또한 가능
# web.php(routes)
Route::get('/post/{id}', 'PostsController@index'); # PostController의 index 메서드에 연결
#PostsController.php
public function index($id)
{
//
return "its working :: ".$id;
}
2.3 resource
resource
메서드를 이용하면 CRUD의 경로를 한줄의 코드로 할당할 수 있음.
# web.php(routes)
Route::resource('post', 'PostsController');
#PostsController.php
public function create()
{
//
return "I am the method that creates stuff :)";
}
public function show($id)
{
//
return "this is the show methods yayyyyyyy :: ". $id;
}
$ php artisan route:list
+--------+-----------+------------------+--------------+---------------------------------
| Domain | Method | URI | Name | Action
+--------+-----------+------------------+--------------+---------------------------------
| | GET|HEAD | post | post.index | PostsController@index
| | POST | post | post.store | PostsController@store
| | GET|HEAD | post/create | post.create | PostsController@create
| | GET|HEAD | post/{post} | post.show | PostsController@show
| | PUT|PATCH | post/{post} | post.update | PostsController@update
| | DELETE | post/{post} | post.destroy | PostsController@destroy
| | GET|HEAD | post/{post}/edit | post.edit | PostsController@edit
+--------+-----------+------------------+--------------+---------------------------------
3. Views
3.1 Get Started
- resources/views/contact.blade.php
- Laravel Blate Template Engine을 사용하면
<?php echo $this ?>
의 문법을 쉽게 `` 으로 변경하여 사용할수 있음. Simple하게 welcome.blade.php 파일의 내용을 갖고와 코드를 붙여놓도록 하자.
- Controller & Routes
- 해당 view로 연결시키는 메서드를 PostsController.php 내에 생성 & Routes 또한 생성
Route::get('/contact', 'PostsController@contact');
public function contact(){
return view('contact');
}
3.2 view에 data 넘기기
- Routes & Controller
{id}
를 variable routing으로 controller로 넘김.
- controller 메서드의 return 값으로 view 파일을 연결시키며,
->with()
메서드를 통해 데이터를 넘김
compact()
메서드로 ->with()
를 대체할 수 있음 (여러개의 파라미터를 넘길 때 유용)
Route::get('/post/{id}', 'PostsController@show_post');
public function show_post($id){
return view('post')->with('id', $id);
#return view('post', compact('id'));
}
<body>
<div class="container">
<h1> Post </h1>
</div>
</body>